From fbd07444314d7bf23dcfdcf711cd52bb046f102e Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 18 Feb 2014 22:43:17 +0100 Subject: [PATCH 01/45] Issue #713 - 64 custom functions instead of 32. 8chars only filenames in PlayTrack function --- companion/src/eeprominterface.h | 2 +- companion/src/firmwares/opentx/opentxeeprom.cpp | 6 ++++-- companion/src/firmwares/opentx/opentxinterface.cpp | 4 ++-- radio/src/eeprom_conversions.cpp | 6 +++--- radio/src/myeeprom.h | 6 +++--- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 60f99b41a..14dc0d7ac 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -74,7 +74,7 @@ const uint8_t modn12x3[4][4]= { #define C9X_MAX_ENCODERS 2 #define C9X_NUM_CHNOUT 32 // number of real output channels #define C9X_NUM_CSW 32 // number of custom switches -#define C9X_MAX_CUSTOM_FUNCTIONS 32 // number of functions assigned to switches +#define C9X_MAX_CUSTOM_FUNCTIONS 64 // number of functions assigned to switches #define C9X_NUM_MODULES 2 #define STK_RUD 1 diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 92b5c4b3e..c078e6009 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -20,7 +20,7 @@ #define MAX_CHANNELS(board, version) (IS_ARM(board) ? 32 : 16) #define MAX_EXPOS(board, version) (IS_ARM(board) ? ((IS_TARANIS(board) && version >= 216) ? 64 : 32) : (IS_DBLRAM(board, version) ? 16 : 14)) #define MAX_CUSTOM_SWITCHES(board, version) (IS_ARM(board) ? 32 : (IS_DBLEEPROM(board, version) ? 15 : 12)) -#define MAX_CUSTOM_FUNCTIONS(board, version) (IS_ARM(board) ? 32 : (IS_DBLEEPROM(board, version) ? 24 : 16)) +#define MAX_CUSTOM_FUNCTIONS(board, version) (IS_ARM(board) ? (version >= 216 ? 64 : 32) : (IS_DBLEEPROM(board, version) ? 24 : 16)) #define MAX_CURVES(board, version) (IS_ARM(board) ? ((IS_TARANIS(board) && version >= 216) ? 32 : 16) : O9X_MAX_CURVES) #define MAX_GVARS(board, version) ((IS_ARM(board) && version >= 216) ? 9 : 5) @@ -1424,7 +1424,9 @@ class ArmCustomFunctionField: public TransformedField { internalField.Append(new SwitchField<8>(fn.swtch, board, version)); internalField.Append(new ConversionField< UnsignedField<8> >((unsigned int &)fn.func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function"))); - if (IS_TARANIS(board)) + if (IS_TARANIS(board) && version >= 216) + internalField.Append(new CharField<8>(_param, false)); + else if (IS_TARANIS(board)) internalField.Append(new CharField<10>(_param, false)); else internalField.Append(new CharField<6>(_param, false)); diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index 16dbfeca9..d61ef76f6 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -521,7 +521,7 @@ int Open9xInterface::getCapability(const Capability capability) return (IS_TARANIS(board) ? 22 : 9); case CustomFunctions: if (IS_ARM(board)) - return 32; + return 64; else if (board==BOARD_GRUVIN9X||board==BOARD_M128) return 24; else @@ -554,7 +554,7 @@ int Open9xInterface::getCapability(const Capability capability) case VoicesAsNumbers: return (IS_ARM(board) ? 0 : 1); case VoicesMaxLength: - return (IS_ARM(board) ? (IS_TARANIS(board) ? 10 : 6) : 0); + return (IS_ARM(board) ? (IS_TARANIS(board) ? 8 : 6) : 0); case MultiLangVoice: return (IS_ARM(board) ? 1 : 0); case SoundPitch: diff --git a/radio/src/eeprom_conversions.cpp b/radio/src/eeprom_conversions.cpp index 8a0e6bac9..6e1a5924b 100644 --- a/radio/src/eeprom_conversions.cpp +++ b/radio/src/eeprom_conversions.cpp @@ -144,7 +144,7 @@ PACK(typedef struct { int8_t swtch; uint8_t func; PACK(union { - char name[LEN_CFN_NAME]; + char name[10]; struct { int16_t val; int16_t ext1; @@ -193,7 +193,7 @@ PACK(typedef struct { int8_t points[NUM_POINTS]; LogicalSwitchData_v215 customSw[NUM_CSW]; - CustomFnData_v215 funcSw[NUM_CFN]; + CustomFnData_v215 funcSw[32]; SwashRingData swashR; PhaseData_v215 phaseData[MAX_PHASES]; @@ -575,7 +575,7 @@ void ConvertModel_215_to_216(ModelData &model) } if (fn.func == FUNC_PLAY_TRACK || fn.func == FUNC_BACKGND_MUSIC) { - memcpy(fn.play.name, oldModel.funcSw[i].param.name, LEN_CFN_NAME); + memcpy(fn.play.name, oldModel.funcSw[i].param.name, 8); } else { fn.all.val = oldModel.funcSw[i].param.composite.val; diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index fed0158f4..0f2e0076b 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -74,7 +74,7 @@ #define MAX_MIXERS 64 #define MAX_EXPOS 64 #define NUM_CSW 32 // number of custom switches - #define NUM_CFN 32 // number of functions assigned to switches + #define NUM_CFN 64 // number of functions assigned to switches #define MAX_SCRIPTS 3 #define MAX_INPUTS 32 #elif defined(CPUARM) @@ -84,7 +84,7 @@ #define MAX_MIXERS 64 #define MAX_EXPOS 32 #define NUM_CSW 32 // number of custom switches - #define NUM_CFN 32 // number of functions assigned to switches + #define NUM_CFN 64 // number of functions assigned to switches #elif defined(CPUM2560) || defined(CPUM2561) #define MAX_MODELS 30 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 @@ -806,7 +806,7 @@ enum AdjustGvarFunctionParam { #if defined(CPUARM) #if defined(PCBTARANIS) - #define LEN_CFN_NAME 10 + #define LEN_CFN_NAME 8 #else #define LEN_CFN_NAME 6 #endif From e38a4d320f4e7e2378563ebafaa9cac0e8336a76 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 19 Feb 2014 10:41:03 +0100 Subject: [PATCH 02/45] Issue #713 - Automatic Switch Audio Files (part 1) --- radio/src/audio_arm.cpp | 219 +++++++++++++++++---------- radio/src/audio_arm.h | 32 ++-- radio/src/eeprom_raw.cpp | 2 +- radio/src/eeprom_rlc.cpp | 2 +- radio/src/opentx.h | 3 +- radio/src/simpgmspace.cpp | 7 +- radio/src/targets/sky9x/diskio.cpp | 4 +- radio/src/targets/taranis/diskio.cpp | 2 +- 8 files changed, 166 insertions(+), 105 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 5d2fb1be9..ea4af817c 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -117,132 +117,190 @@ const char * audioFilenames[] = { }; uint64_t sdAvailableSystemAudioFiles = 0; -uint8_t sdAvailablePhaseAudioFiles[MAX_PHASES] = { 0 }; -uint8_t sdAvailableMixerAudioFiles[MAX_MIXERS] = { 0 }; +uint32_t sdAvailablePhaseAudioFiles = 0; +uint32_t sdAvailableSwitchAudioFiles = 0; +uint64_t sdAvailableLogicalSwitchAudioFiles = 0; -void refreshSystemAudioFiles() +#define MASK_SYSTEM_AUDIO_FILE(index) ((uint64_t)1 << index) +#define MASK_PHASE_AUDIO_FILE(index, event) ((uint32_t)1 << (2*index+event)) +#define MASK_SWITCH_AUDIO_FILE(index) ((uint32_t)1 << index) +#define MASK_LOGICAL_SWITCH_AUDIO_FILE(index, event) ((uint64_t)1 << (2*index+event)) + +bool isFileAvailable(const char * filename) { FILINFO info; -#if _USE_LFN TCHAR lfn[_MAX_LFN + 1]; info.lfname = lfn; info.lfsize = sizeof(lfn); -#endif + return f_stat(filename, &info) == FR_OK; +} - char filename[32] = SYSTEM_SOUNDS_PATH "/"; +void getSystemAudioFile(char * filename, int index) +{ + strcpy(filename, SYSTEM_SOUNDS_PATH "/"); strncpy(filename+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); + strcpy(filename+sizeof(SYSTEM_SOUNDS_PATH), audioFilenames[index]); + strcat(filename+sizeof(SYSTEM_SOUNDS_PATH), SOUNDS_EXT); +} + +void referenceSystemAudioFiles() +{ + char filename[AUDIO_FILENAME_MAXLEN+1]; + uint64_t availableAudioFiles = 0; assert(sizeof(audioFilenames)==AU_FRSKY_FIRST*sizeof(char *)); assert(sizeof(sdAvailableSystemAudioFiles)*8 >= AU_FRSKY_FIRST); - uint64_t availableAudioFiles = 0; - - for (uint32_t i=0; iid, 2); - - if (sdMounted()) { - char *buf = strcat_modelname(&filename[sizeof(SOUNDS_PATH)], g_eeGeneral.currModel); - *buf++ = '/'; + char *str = strcat_modelname(filename+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); + *str++ = '/'; + char * tmp = strcat_phasename(str, index); + strcpy(tmp, suffixes[event]); + strcat(tmp, SOUNDS_EXT); +} - for (uint32_t i=0; iid, 2); + char *str = strcat_modelname(filename+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); + *str++ = '/'; + int len = STR_VSWITCHES[0]; + strncpy(str, &STR_VSWITCHES[1+len*index], len); + str += len-1; + if (*str == '\300') { + strcpy(str, "-up"); + str += 3; + } + else if (*str == '-') { + strcpy(str, "-mid"); + str += 4; + } + else if (*str == '\301') { + strcpy(str, "-down"); + str += 5; + } + else { + str += 1; + } + strcat(str, SOUNDS_EXT); +} + +void getLogicalSwitchAudioFile(char * filename, int index, unsigned int event) +{ + strcpy(filename, SOUNDS_PATH "/"); + strncpy(filename+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); + char *str = strcat_modelname(filename+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); + *str++ = '/'; + int len = STR_VSWITCHES[0]; + strncpy(str, &STR_VSWITCHES[1+len*(index+SWSRC_FIRST_CSW-1)], len); + str += len; + strcpy(str, suffixes[event]); + strcat(str, SOUNDS_EXT); +} + +void referenceModelAudioFiles() +{ + char filename[AUDIO_FILENAME_MAXLEN+1]; + + { + // Phases Audio Files -[on|off].wav + uint32_t mask = 0; + for (int i=0; i-[up|mid|down].wav + uint32_t mask = 0; + for (int i=0; i-[on|off].wav + uint64_t mask = 0; + for (int i=0; i> 24); uint8_t index = (i >> 16) & 0xFF; uint8_t event = i & 0xFF; #if 0 - printf("isAudioFileAvailable(%08x)\n", i); fflush(stdout); + printf("isAudioFileReferenced(%08x)\n", i); fflush(stdout); #endif if (category == SYSTEM_AUDIO_CATEGORY) { - if (sdAvailableSystemAudioFiles & ((uint64_t)1 << event)) { - strcpy(filename, SYSTEM_SOUNDS_PATH "/"); - strncpy(filename+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - strcpy(filename+sizeof(SYSTEM_SOUNDS_PATH), audioFilenames[i]); - strcat(filename+sizeof(SYSTEM_SOUNDS_PATH), SOUNDS_EXT); + if (sdAvailableSystemAudioFiles & MASK_SYSTEM_AUDIO_FILE(index)) { + getSystemAudioFile(filename, index); return true; } } else if (category == PHASE_AUDIO_CATEGORY) { - if (sdAvailablePhaseAudioFiles[index] & ((uint32_t)1 << event)) { - strcpy(filename, SOUNDS_PATH "/"); - strncpy(filename+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - char *str = strcat_modelname(filename+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); - *str++ = '/'; - char * tmp = strcat_phasename(str, index); - if (tmp != str) { - strcpy(tmp, suffixes[event]); - strcat(tmp, SOUNDS_EXT); - return true; - } + if (sdAvailablePhaseAudioFiles & MASK_PHASE_AUDIO_FILE(index, event)) { + getPhaseAudioFile(filename, index, event); + return true; } } - else if (category == MIXER_AUDIO_CATEGORY) { - if (sdAvailableMixerAudioFiles[index] & ((uint32_t)1 << event)) { - strcpy(filename, SOUNDS_PATH "/"); - strncpy(filename+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - char *str = strcat_modelname(filename+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); - *str++ = '/'; - char * tmp = strcat_mixername(str, index); - if (tmp != str) { - strcpy(tmp, suffixes[event]); - strcat(tmp, SOUNDS_EXT); - return true; - } + else if (category == SWITCH_AUDIO_CATEGORY) { + if (sdAvailableSwitchAudioFiles & MASK_SWITCH_AUDIO_FILE(index)) { + getSwitchAudioFile(filename, index); + return true; + } + } + else if (category == LOGICAL_SWITCH_AUDIO_CATEGORY) { + if (sdAvailableLogicalSwitchAudioFiles & MASK_LOGICAL_SWITCH_AUDIO_FILE(index, event)) { + getLogicalSwitchAudioFile(filename, index, event); + return true; } } return false; } #else -#define isAudioFileAvailable(i, f) false +#define isAudioFileReferenced(i, f) false #endif +// TODO should be generated and in flash rather than in ram int16_t alawTable[256]; int16_t ulawTable[256]; @@ -757,10 +815,6 @@ void AudioQueue::reset() void audioEvent(uint8_t e, uint16_t f) { -#if defined(SDCARD) - char filename[AUDIO_FILENAME_MAXLEN+1]; -#endif - #if defined(HAPTIC) haptic.event(e); //do this before audio to help sync timings #endif @@ -773,7 +827,8 @@ void audioEvent(uint8_t e, uint16_t f) if (g_eeGeneral.beepMode>0 || (g_eeGeneral.beepMode==0 && e>=AU_TRIM_MOVE) || (g_eeGeneral.beepMode>=-1 && e<=AU_ERROR)) { #if defined(SDCARD) - if (e < AU_FRSKY_FIRST && isAudioFileAvailable(e, filename)) { + char filename[AUDIO_FILENAME_MAXLEN+1]; + if (e < AU_FRSKY_FIRST && isAudioFileReferenced(e, filename)) { audioQueue.playFile(filename); } else diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index 9b45187b0..b96808426 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -277,16 +277,21 @@ void audioStart(); #define AUDIO_HEARTBEAT() -#define SYSTEM_AUDIO_CATEGORY 0 -#define MODEL_AUDIO_CATEGORY 1 -#define PHASE_AUDIO_CATEGORY 2 -#define MIXER_AUDIO_CATEGORY 3 +enum AutomaticPromptsCategories { + SYSTEM_AUDIO_CATEGORY, + MODEL_AUDIO_CATEGORY, + PHASE_AUDIO_CATEGORY, + SWITCH_AUDIO_CATEGORY, + LOGICAL_SWITCH_AUDIO_CATEGORY, +}; -#define AUDIO_EVENT_OFF 0 -#define AUDIO_EVENT_ON 1 -#define AUDIO_EVENT_BG 2 +enum AutomaticPromptsEvents { + AUDIO_EVENT_OFF, + AUDIO_EVENT_ON, + AUDIO_EVENT_MID, +}; -extern void pushPrompt(uint16_t prompt, uint8_t id=0); +void pushPrompt(uint16_t prompt, uint8_t id=0); #define I18N_PLAY_FUNCTION(lng, x, ...) void lng ## _ ## x(__VA_ARGS__, uint8_t id) #define PLAY_FUNCTION(x, ...) void x(__VA_ARGS__, uint8_t id) @@ -300,15 +305,16 @@ extern void pushPrompt(uint16_t prompt, uint8_t id=0); #define AUDIO_RESET() audioQueue.reset() #if defined(SDCARD) - #define PLAY_PHASE_OFF(phase) do { char filename[AUDIO_FILENAME_MAXLEN+1]; if (isAudioFileAvailable((PHASE_AUDIO_CATEGORY << 24) + (phase << 16) + AUDIO_EVENT_OFF, filename)) audioQueue.playFile(filename); } while (0) - #define PLAY_PHASE_ON(phase) do { char filename[AUDIO_FILENAME_MAXLEN+1]; if (isAudioFileAvailable((PHASE_AUDIO_CATEGORY << 24) + (phase << 16) + AUDIO_EVENT_ON, filename)) audioQueue.playFile(filename); } while (0) + #define PLAY_PHASE_OFF(phase) do { char filename[AUDIO_FILENAME_MAXLEN+1]; if (isAudioFileReferenced((PHASE_AUDIO_CATEGORY << 24) + (phase << 16) + AUDIO_EVENT_OFF, filename)) audioQueue.playFile(filename); } while (0) + #define PLAY_PHASE_ON(phase) do { char filename[AUDIO_FILENAME_MAXLEN+1]; if (isAudioFileReferenced((PHASE_AUDIO_CATEGORY << 24) + (phase << 16) + AUDIO_EVENT_ON, filename)) audioQueue.playFile(filename); } while (0) #else #define PLAY_PHASE_OFF(phase) #define PLAY_PHASE_ON(phase) #endif -extern void refreshSystemAudioFiles(); -extern void refreshModelAudioFiles(); -extern bool isAudioFileAvailable(uint32_t i, char * filename); +void referenceSystemAudioFiles(); +void referenceModelAudioFiles(); + +bool isAudioFileReferenced(uint32_t i, char * filename/*at least AUDIO_FILENAME_MAXLEN+1 long*/); #endif diff --git a/radio/src/eeprom_raw.cpp b/radio/src/eeprom_raw.cpp index 718fe3558..5050f7cbb 100644 --- a/radio/src/eeprom_raw.cpp +++ b/radio/src/eeprom_raw.cpp @@ -404,7 +404,7 @@ void eeLoadModel(uint8_t id) #endif #if defined(CPUARM) && defined(SDCARD) - refreshModelAudioFiles(); + referenceModelAudioFiles(); #endif LOAD_MODEL_BITMAP(); diff --git a/radio/src/eeprom_rlc.cpp b/radio/src/eeprom_rlc.cpp index f6f62502e..190dcdbe8 100644 --- a/radio/src/eeprom_rlc.cpp +++ b/radio/src/eeprom_rlc.cpp @@ -978,7 +978,7 @@ void eeLoadModel(uint8_t id) #endif #if defined(CPUARM) && defined(SDCARD) - refreshModelAudioFiles(); + referenceModelAudioFiles(); #endif LOAD_MODEL_BITMAP(); diff --git a/radio/src/opentx.h b/radio/src/opentx.h index dcfed29a4..b6a555b11 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1616,8 +1616,7 @@ uint8_t zlen(const char *str, uint8_t size); bool zexist(const char *str, uint8_t size); char * strcat_zchar(char * dest, char * name, uint8_t size, const char *defaultName, uint8_t defaultNameSize, uint8_t defaultIdx); #define strcat_modelname(dest, idx) strcat_zchar(dest, modelHeaders[idx].name, LEN_MODEL_NAME, STR_MODEL, PSIZE(TR_MODEL), idx+1) -#define strcat_phasename(dest, idx) strcat_zchar(dest, g_model.phaseData[idx].name, LEN_FP_NAME, NULL, 0, 0) -#define strcat_mixername(dest, idx) strcat_zchar(dest, g_model.mixData[idx].name, LEN_EXPOMIX_NAME, NULL, 0, 0) +#define strcat_phasename(dest, idx) strcat_zchar(dest, g_model.phaseData[idx].name, LEN_FP_NAME, STR_FP, PSIZE(TR_FP), idx+1) #define ZLEN(s) zlen(s, sizeof(s)) #define ZEXIST(s) zexist(s, sizeof(s)) #endif diff --git a/radio/src/simpgmspace.cpp b/radio/src/simpgmspace.cpp index cd3fb4803..0b5deb589 100644 --- a/radio/src/simpgmspace.cpp +++ b/radio/src/simpgmspace.cpp @@ -300,7 +300,7 @@ void *main_thread(void *) eeReadAll(); // load general setup and selected model #if defined(CPUARM) && defined(SDCARD) - refreshSystemAudioFiles(); + referenceSystemAudioFiles(); #endif if (g_eeGeneral.backlightMode != e_backlight_mode_off) backlightOn(); // on Tx start turn the light on @@ -473,9 +473,10 @@ char *convertSimuPath(const char *path) FRESULT f_stat (const TCHAR * name, FILINFO *) { + char *path = convertSimuPath(name); struct stat tmp; - // printf("f_stat(%s)\n", path); fflush(stdout); - return stat(convertSimuPath(name), &tmp) ? FR_INVALID_NAME : FR_OK; + TRACE("f_stat(%s)", path); + return stat(path, &tmp) ? FR_INVALID_NAME : FR_OK; } FRESULT f_mount (BYTE, FATFS*) diff --git a/radio/src/targets/sky9x/diskio.cpp b/radio/src/targets/sky9x/diskio.cpp index d7f60e900..8d9ff5cfc 100644 --- a/radio/src/targets/sky9x/diskio.cpp +++ b/radio/src/targets/sky9x/diskio.cpp @@ -1014,7 +1014,7 @@ void sdMountPoll() case SD_ST_DATA: if (!usbPlugged() && f_mount(0, &g_FATFS_Obj) == FR_OK) { - refreshSystemAudioFiles(); + referenceSystemAudioFiles(); Card_state = SD_ST_MOUNTED; } break; @@ -1082,7 +1082,7 @@ void sdInit() Card_state = SD_ST_DATA; if (f_mount(0, &g_FATFS_Obj) == FR_OK) { - refreshSystemAudioFiles(); + referenceSystemAudioFiles(); Card_state = SD_ST_MOUNTED; } diff --git a/radio/src/targets/taranis/diskio.cpp b/radio/src/targets/taranis/diskio.cpp index b1d2dea7e..d9586804f 100644 --- a/radio/src/targets/taranis/diskio.cpp +++ b/radio/src/targets/taranis/diskio.cpp @@ -969,7 +969,7 @@ FIL g_telemetryFile = {0}; void sdInit() { if (f_mount(0, &g_FATFS_Obj) == FR_OK) { - refreshSystemAudioFiles(); + referenceSystemAudioFiles(); #if defined(DEBUG) f_open(&g_telemetryFile, LOGS_PATH "/sport.log", FA_OPEN_ALWAYS | FA_WRITE); From ad134173be5e70692d31bc99e0f56b4786906e1f Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 19 Feb 2014 11:30:54 +0100 Subject: [PATCH 03/45] Issue #713 - Now automatic Switch files are played --- radio/src/audio_arm.cpp | 10 ++++++ radio/src/audio_arm.h | 7 ++-- radio/src/opentx.cpp | 77 +++++++++++++++++++++++++++++++---------- 3 files changed, 73 insertions(+), 21 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index ea4af817c..0dc92a1e3 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -296,8 +296,18 @@ bool isAudioFileReferenced(uint32_t i, char * filename) return false; } + +void playModelEvent(uint8_t category, uint8_t index, uint8_t event) +{ + char filename[AUDIO_FILENAME_MAXLEN+1]; + if (isAudioFileReferenced((category << 24) + (index << 16) + event, filename)) { + audioQueue.playFile(filename); + } +} #else + #define isAudioFileReferenced(i, f) false + #endif // TODO should be generated and in flash rather than in ram diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index b96808426..41a170d7b 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -305,11 +305,14 @@ void pushPrompt(uint16_t prompt, uint8_t id=0); #define AUDIO_RESET() audioQueue.reset() #if defined(SDCARD) - #define PLAY_PHASE_OFF(phase) do { char filename[AUDIO_FILENAME_MAXLEN+1]; if (isAudioFileReferenced((PHASE_AUDIO_CATEGORY << 24) + (phase << 16) + AUDIO_EVENT_OFF, filename)) audioQueue.playFile(filename); } while (0) - #define PLAY_PHASE_ON(phase) do { char filename[AUDIO_FILENAME_MAXLEN+1]; if (isAudioFileReferenced((PHASE_AUDIO_CATEGORY << 24) + (phase << 16) + AUDIO_EVENT_ON, filename)) audioQueue.playFile(filename); } while (0) + void playModelEvent(uint8_t category, uint8_t index, uint8_t event=0); + #define PLAY_PHASE_OFF(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_OFF) + #define PLAY_PHASE_ON(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_ON) + #define PLAY_SWITCH_MOVED(sw) playModelEvent(SWITCH_AUDIO_CATEGORY, sw) #else #define PLAY_PHASE_OFF(phase) #define PLAY_PHASE_ON(phase) + #define PLAY_SWITCH_MOVED(sw) #endif void referenceSystemAudioFiles(); diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 320421007..49d8c94ff 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1322,26 +1322,65 @@ tmr10ms_t switchesMidposStart[6] = { 0 }; uint32_t switchesPos = 0; tmr10ms_t potsLastposStart[NUM_XPOTS]; uint8_t potsPos[NUM_XPOTS]; + +uint32_t check2PosSwitchPosition(EnumKeys sw) +{ + uint32_t result; + uint32_t index; + + if (switchState(sw)) + index = sw - SW_SA0; + else + index = sw - SW_SA0 + 1; + + result = (1 << index); + + if (!(switchesPos & result)) { + PLAY_SWITCH_MOVED(index); + } + + return result; +} + #define DELAY_SWITCH_3POS 10/*100ms*/ -#define CHECK_2POS(sw) newPos |= (switchState(sw ## 0) ? (1 << (sw ## 0 - SW_SA0)) : (1 << (sw ## 0 - SW_SA0 + 1))) -#define CHECK_3POS(idx, sw) if (switchState(sw ## 0)) { \ - newPos |= (1 << (sw ## 0 - SW_SA0)); \ - switchesMidposStart[idx] = 0; \ - } \ - else if (switchState(sw ## 2)) { \ - newPos |= (1 << (sw ## 0 - SW_SA0 + 2)); \ - switchesMidposStart[idx] = 0; \ - } \ - else if ((switchesPos & (1 << (sw ## 0 - SW_SA0 + 1))) || (switchesMidposStart[idx] && (tmr10ms_t)(get_tmr10ms() - switchesMidposStart[idx]) > DELAY_SWITCH_3POS)) { \ - newPos |= (1 << (sw ## 0 - SW_SA0 + 1)); \ - switchesMidposStart[idx] = 0; \ - } \ - else { \ - if (!switchesMidposStart[idx]) { \ - switchesMidposStart[idx] = get_tmr10ms(); \ - } \ - newPos |= (switchesPos & (0x7 << (sw ## 0 - SW_SA0))); \ - } +uint32_t check3PosSwitchPosition(uint8_t idx, EnumKeys sw) +{ + uint32_t result; + uint32_t index; + + if (switchState(sw)) { + index = sw - SW_SA0; + result = (1 << index); + switchesMidposStart[idx] = 0; + } + else if (switchState(EnumKeys(sw+2))) { + index = sw - SW_SA0 + 2; + result = (1 << index); + switchesMidposStart[idx] = 0; + } + else if ((switchesPos & (1 << (sw - SW_SA0 + 1))) || (switchesMidposStart[idx] && (tmr10ms_t)(get_tmr10ms() - switchesMidposStart[idx]) > DELAY_SWITCH_3POS)) { + index = sw - SW_SA0 + 1; + result = (1 << index); + switchesMidposStart[idx] = 0; + } + else { + index = sw - SW_SA0 + 1; + if (!switchesMidposStart[idx]) { + switchesMidposStart[idx] = get_tmr10ms(); + } + result = (switchesPos & (0x7 << (sw - SW_SA0))); + } + + if (!(switchesPos & result)) { + PLAY_SWITCH_MOVED(index); + } + + return result; +} + +#define CHECK_2POS(sw) newPos |= check2PosSwitchPosition(sw ## 0) +#define CHECK_3POS(idx, sw) newPos |= check3PosSwitchPosition(idx, sw ## 0) + void getSwitchesPosition() { uint32_t newPos = 0; From 7c4214d5b9305cc9f713232cf36b63bb32b7aa94 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 19 Feb 2014 16:41:18 +0100 Subject: [PATCH 04/45] More custom scripts (7 instead of 3) --- companion/src/eeprominterface.h | 2 +- radio/src/.gitignore | 1 + radio/src/gui/menu_model.cpp | 6 +++--- radio/src/lua.cpp | 4 ++-- radio/src/myeeprom.h | 2 +- radio/src/sdcard.h | 1 - 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 14dc0d7ac..05d871592 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -856,7 +856,7 @@ class ModuleData { void clear() { memset(this, 0, sizeof(ModuleData)); } }; -#define C9X_MAX_SCRIPTS 3 +#define C9X_MAX_SCRIPTS 7 #define C9X_MAX_SCRIPT_INPUTS 10 class ScriptData { public: diff --git a/radio/src/.gitignore b/radio/src/.gitignore index 3a16d35fe..ecb3765ab 100644 --- a/radio/src/.gitignore +++ b/radio/src/.gitignore @@ -14,3 +14,4 @@ /SOUNDS /LOGS /*.bat +/TEMPLATES diff --git a/radio/src/gui/menu_model.cpp b/radio/src/gui/menu_model.cpp index 8d271aa56..9b79f61d9 100644 --- a/radio/src/gui/menu_model.cpp +++ b/radio/src/gui/menu_model.cpp @@ -5139,8 +5139,8 @@ void onModelCustomScriptMenu(const char *result) ScriptData &sd = g_model.scriptsData[s_currIdx]; if (result == STR_UPDATE_LIST) { - if (!listSdFiles(SCRIPTS_PATH, MIXES_EXT, sizeof(sd.file), NULL)) { - POPUP_WARNING(STR_NO_BITMAPS_ON_SD); + if (!listSdFiles(SCRIPTS_PATH, SCRIPTS_EXT, sizeof(sd.file), NULL)) { + POPUP_WARNING(STR_NO_SCRIPTS_ON_SD); s_menu_flags = 0; } } @@ -5187,7 +5187,7 @@ void menuModelCustomScriptOne(uint8_t event) lcd_putsiAtt(SCRIPT_ONE_2ND_COLUMN_POS, y, STR_VCSWFUNC, 0, attr); if (attr && event==EVT_KEY_BREAK(KEY_ENTER) && !READ_ONLY()) { s_editMode = 0; - if (listSdFiles(SCRIPTS_PATH, MIXES_EXT, sizeof(sd.file), sd.file, LIST_NONE_SD_FILE)) { + if (listSdFiles(SCRIPTS_PATH, SCRIPTS_EXT, sizeof(sd.file), sd.file, LIST_NONE_SD_FILE)) { menuHandler = onModelCustomScriptMenu; } else { diff --git a/radio/src/lua.cpp b/radio/src/lua.cpp index 0e18824fa..1a2ab9e1a 100644 --- a/radio/src/lua.cpp +++ b/radio/src/lua.cpp @@ -935,10 +935,10 @@ void luaLoadModelScript(uint8_t index) sid.state = SCRIPT_NOFILE; if (ZEXIST(sd.file)) { - char filename[sizeof(SCRIPTS_PATH)+sizeof(sd.file)+sizeof(MIXES_EXT)] = SCRIPTS_PATH "/"; + char filename[sizeof(SCRIPTS_PATH)+sizeof(sd.file)+sizeof(SCRIPTS_EXT)] = SCRIPTS_PATH "/"; strncpy(filename+sizeof(SCRIPTS_PATH), sd.file, sizeof(sd.file)); filename[sizeof(SCRIPTS_PATH)+sizeof(sd.file)] = '\0'; - strcat(filename+sizeof(SCRIPTS_PATH), MIXES_EXT); + strcat(filename+sizeof(SCRIPTS_PATH), SCRIPTS_EXT); luaLoad(filename, sid); } } diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 0f2e0076b..bcfa22a20 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -75,7 +75,7 @@ #define MAX_EXPOS 64 #define NUM_CSW 32 // number of custom switches #define NUM_CFN 64 // number of functions assigned to switches - #define MAX_SCRIPTS 3 + #define MAX_SCRIPTS 7 #define MAX_INPUTS 32 #elif defined(CPUARM) #define MAX_MODELS 60 diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h index 4e6c446d7..07e528a68 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -53,7 +53,6 @@ #define SOUNDS_EXT ".wav" #define BITMAPS_EXT ".bmp" #define SCRIPTS_EXT ".lua" -#define MIXES_EXT ".mix" #define TEXT_EXT ".txt" extern FATFS g_FATFS_Obj; From b3e2e8e32128b53ee6ca39dbd9aae15070119c21 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 19 Feb 2014 16:57:02 +0100 Subject: [PATCH 05/45] Compilation failure. Thanks Jenkins! --- radio/src/gui/menus.cpp | 4 ++-- radio/src/myeeprom.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/radio/src/gui/menus.cpp b/radio/src/gui/menus.cpp index b760f3e22..dfc74980e 100644 --- a/radio/src/gui/menus.cpp +++ b/radio/src/gui/menus.cpp @@ -778,7 +778,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t vertpos_t realPgOfs = s_pgOfs; vertpos_t realMaxrow = maxrow; for (vertpos_t i=1; i<=maxrow; i++) { - if (MAXCOL_RAW(i) == HIDDEN_ROW) { + if (MAXCOL(i) == HIDDEN_ROW) { realMaxrow--; if (i < l_posVert) realPosVert--; @@ -790,7 +790,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t else if (realPosVert<1+realPgOfs) realPgOfs = realPosVert-1; s_pgOfs = realPgOfs; for (vertpos_t i=1; i<=realPgOfs; i++) { - if (MAXCOL_RAW(i) == HIDDEN_ROW) { + if (MAXCOL(i) == HIDDEN_ROW) { s_pgOfs++; } } diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index bcfa22a20..ab7073e18 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -323,8 +323,9 @@ enum BacklightMode { #define SPLASH_MODE uint8_t splashMode:1; uint8_t spare4:2 #endif -#if defined(PCBTARANIS) #define POTS_POS_COUNT 6 + +#if defined(PCBTARANIS) PACK(typedef struct { uint8_t count; uint8_t steps[POTS_POS_COUNT-1]; From 82348f7e059571432e193e1b124eb8604d5c3b1a Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 19 Feb 2014 21:39:39 +0100 Subject: [PATCH 06/45] Import/Export broken in Companion (7scripts instead of 3) --- companion/src/firmwares/opentx/opentxeeprom.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index c078e6009..3b3259803 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -2205,7 +2205,7 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u } if (IS_TARANIS(board) && version >= 216) { - for (int i=0; i<3; i++) { + for (int i=0; i<7; i++) { ScriptData & script = modelData.scriptData[i]; internalField.Append(new ZCharField<10>(script.filename)); internalField.Append(new ZCharField<10>(script.name)); From 7e0a30c08fc302608d45b63813fab67507eb2639 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 20 Feb 2014 16:21:04 +0100 Subject: [PATCH 07/45] Reduces the duration of SD search for automatic model files --- radio/src/audio_arm.cpp | 115 +++++++++++++++++++++++----------------- 1 file changed, 67 insertions(+), 48 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 0dc92a1e3..4161778d8 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -163,12 +163,18 @@ void referenceSystemAudioFiles() const char * suffixes[] = { "-off", "-on" }; +char * getModelPath(char * path) +{ + strcpy(path, SOUNDS_PATH "/"); + strncpy(path+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); + char * result = strcat_modelname(path+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); + *result++ = '/'; + return result; +} + void getPhaseAudioFile(char * filename, int index, unsigned int event) { - strcpy(filename, SOUNDS_PATH "/"); - strncpy(filename+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - char *str = strcat_modelname(filename+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); - *str++ = '/'; + char * str = getModelPath(filename); char * tmp = strcat_phasename(str, index); strcpy(tmp, suffixes[event]); strcat(tmp, SOUNDS_EXT); @@ -176,10 +182,7 @@ void getPhaseAudioFile(char * filename, int index, unsigned int event) void getSwitchAudioFile(char * filename, int index) { - strcpy(filename, SOUNDS_PATH "/"); - strncpy(filename+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - char *str = strcat_modelname(filename+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); - *str++ = '/'; + char * str = getModelPath(filename); int len = STR_VSWITCHES[0]; strncpy(str, &STR_VSWITCHES[1+len*index], len); str += len-1; @@ -203,10 +206,7 @@ void getSwitchAudioFile(char * filename, int index) void getLogicalSwitchAudioFile(char * filename, int index, unsigned int event) { - strcpy(filename, SOUNDS_PATH "/"); - strncpy(filename+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - char *str = strcat_modelname(filename+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); - *str++ = '/'; + char * str = getModelPath(filename); int len = STR_VSWITCHES[0]; strncpy(str, &STR_VSWITCHES[1+len*(index+SWSRC_FIRST_CSW-1)], len); str += len; @@ -216,46 +216,65 @@ void getLogicalSwitchAudioFile(char * filename, int index, unsigned int event) void referenceModelAudioFiles() { - char filename[AUDIO_FILENAME_MAXLEN+1]; + char path[AUDIO_FILENAME_MAXLEN+1]; + FILINFO fno; + DIR dir; + char *fn; /* This function is assuming non-Unicode cfg. */ + TCHAR lfn[_MAX_LFN + 1]; + fno.lfname = lfn; + fno.lfsize = sizeof(lfn); - { - // Phases Audio Files -[on|off].wav - uint32_t mask = 0; - for (int i=0; i-[on|off].wav + for (int i=0; i-[up|mid|down].wav + for (int i=0; i-[on|off].wav + for (int i=0; i-[up|mid|down].wav - uint32_t mask = 0; - for (int i=0; i-[on|off].wav - uint64_t mask = 0; - for (int i=0; i Date: Thu, 20 Feb 2014 16:57:36 +0100 Subject: [PATCH 08/45] All alerts are TADA :) --- radio/src/audio_arm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 4161778d8..7942b6e5f 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -289,7 +289,7 @@ bool isAudioFileReferenced(uint32_t i, char * filename) #endif if (category == SYSTEM_AUDIO_CATEGORY) { - if (sdAvailableSystemAudioFiles & MASK_SYSTEM_AUDIO_FILE(index)) { + if (sdAvailableSystemAudioFiles & MASK_SYSTEM_AUDIO_FILE(event)) { getSystemAudioFile(filename, index); return true; } From 444fc8571044f1f1500c1f85eabe5f7251db85ef Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 20 Feb 2014 16:57:36 +0100 Subject: [PATCH 09/45] All alerts are TADA :) --- radio/src/audio_arm.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 4161778d8..1b95e8281 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -267,7 +267,7 @@ void referenceModelAudioFiles() for (int i=0; i Date: Thu, 20 Feb 2014 18:00:14 +0100 Subject: [PATCH 10/45] Again the TADA on all alerts --- radio/src/audio_arm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index eb87d20b9..2f6636203 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -290,7 +290,7 @@ bool isAudioFileReferenced(uint32_t i, char * filename) if (category == SYSTEM_AUDIO_CATEGORY) { if (sdAvailableSystemAudioFiles & MASK_SYSTEM_AUDIO_FILE(event)) { - getSystemAudioFile(filename, index); + getSystemAudioFile(filename, event); return true; } } From a91bfbba9e6f28ed95671ac8d119afa2a0e0a3bd Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 20 Feb 2014 18:15:24 +0100 Subject: [PATCH 11/45] Bug in SD audio parse --- radio/src/audio_arm.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 2f6636203..977774357 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -169,6 +169,7 @@ char * getModelPath(char * path) strncpy(path+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); char * result = strcat_modelname(path+sizeof(SOUNDS_PATH), g_eeGeneral.currModel); *result++ = '/'; + *result = '\0'; return result; } @@ -229,6 +230,7 @@ void referenceModelAudioFiles() sdAvailableLogicalSwitchAudioFiles = 0; char * filename = getModelPath(path); +// TODO au cas ou ... *(filename-1) = '\0'; FRESULT res = f_opendir(&dir, path); /* Open the directory */ if (res == FR_OK) { From 91bec1e4d967a96927a97cfd987e1ac11de91a7c Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 20 Feb 2014 19:07:39 +0100 Subject: [PATCH 12/45] Now it works. No hashed sounds at startup. --- radio/src/audio_arm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 977774357..7f1d92d52 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -230,7 +230,7 @@ void referenceModelAudioFiles() sdAvailableLogicalSwitchAudioFiles = 0; char * filename = getModelPath(path); -// TODO au cas ou ... *(filename-1) = '\0'; + *(filename-1) = '\0'; FRESULT res = f_opendir(&dir, path); /* Open the directory */ if (res == FR_OK) { From 65e6814b2851a7fd809529832f4a94c8eabd7426 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 20 Feb 2014 19:25:08 +0100 Subject: [PATCH 13/45] Switches positions not played at startup --- radio/src/opentx.cpp | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 49d8c94ff..a086d8764 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1323,7 +1323,7 @@ uint32_t switchesPos = 0; tmr10ms_t potsLastposStart[NUM_XPOTS]; uint8_t potsPos[NUM_XPOTS]; -uint32_t check2PosSwitchPosition(EnumKeys sw) +uint32_t check2PosSwitchPosition(EnumKeys sw, bool play) { uint32_t result; uint32_t index; @@ -1335,7 +1335,7 @@ uint32_t check2PosSwitchPosition(EnumKeys sw) result = (1 << index); - if (!(switchesPos & result)) { + if (play && !(switchesPos & result)) { PLAY_SWITCH_MOVED(index); } @@ -1343,7 +1343,7 @@ uint32_t check2PosSwitchPosition(EnumKeys sw) } #define DELAY_SWITCH_3POS 10/*100ms*/ -uint32_t check3PosSwitchPosition(uint8_t idx, EnumKeys sw) +uint32_t check3PosSwitchPosition(uint8_t idx, EnumKeys sw, bool play) { uint32_t result; uint32_t index; @@ -1371,17 +1371,17 @@ uint32_t check3PosSwitchPosition(uint8_t idx, EnumKeys sw) result = (switchesPos & (0x7 << (sw - SW_SA0))); } - if (!(switchesPos & result)) { + if (play && !(switchesPos & result)) { PLAY_SWITCH_MOVED(index); } return result; } -#define CHECK_2POS(sw) newPos |= check2PosSwitchPosition(sw ## 0) -#define CHECK_3POS(idx, sw) newPos |= check3PosSwitchPosition(idx, sw ## 0) +#define CHECK_2POS(sw) newPos |= check2PosSwitchPosition(sw ## 0, play) +#define CHECK_3POS(idx, sw) newPos |= check3PosSwitchPosition(idx, sw ## 0, play) -void getSwitchesPosition() +void getSwitchesPosition(bool play) { uint32_t newPos = 0; CHECK_3POS(0, SW_SA); @@ -1415,7 +1415,7 @@ void getSwitchesPosition() #define SWITCH_POSITION(sw) (switchesPos & (1<<(sw))) #define POT_POSITION(sw) ((potsPos[(sw)/POTS_POS_COUNT] & 0x0f) == ((sw) % POTS_POS_COUNT)) #else -#define getSwitchesPosition() +#define getSwitchesPosition(...) #define SWITCH_POSITION(idx) switchState((EnumKeys)(SW_BASE+(idx))) #endif @@ -3903,17 +3903,25 @@ void doMixerCalculations() PORTH |= 0x40; // PORTH:6 LOW->HIGH signals start of mixer interrupt #endif - static tmr10ms_t lastTMR; + static tmr10ms_t lastTMR = 0; tmr10ms_t tmr10ms = get_tmr10ms(); - uint8_t tick10ms = (tmr10ms >= lastTMR ? tmr10ms - lastTMR : 1); // handle tick10ms overrun - //@@@ open.20.fsguruh: correct overflow handling costs a lot of code; happens only each 11 min; + uint8_t tick10ms = (tmr10ms >= lastTMR ? tmr10ms - lastTMR : 1); + // handle tick10ms overrun + // correct overflow handling costs a lot of code; happens only each 11 min; // therefore forget the exact calculation and use only 1 instead; good compromise + +#if !defined(CPUARM) lastTMR = tmr10ms; +#endif getADC(); - getSwitchesPosition(); + getSwitchesPosition(lastTMR != 0); + +#if defined(CPUARM) + lastTMR = tmr10ms; +#endif #if defined(PCBSKY9X) && !defined(REVA) && !defined(SIMU) Current_analogue = (Current_analogue*31 + s_anaFilt[8] ) >> 5 ; From e5f336fba1c3f775fc5919cfee5c51f56955082c Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 20 Feb 2014 19:33:09 +0100 Subject: [PATCH 14/45] Indentation --- radio/src/opentx.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index a086d8764..ff8a7c1d8 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -2419,8 +2419,8 @@ void checkSwitches() case 1: lcd_putc(60+i*(5*FW)+2*FW+2, 6*FH-2, g_model.potPosition[i] > (getValue(MIXSRC_FIRST_POT+i) >> 3) ? 126 : 127); break; - case 2: - case 3: + case 2: + case 3: lcd_putc(60+i*(5*FW)+2*FW+2, 6*FH-2, g_model.potPosition[i] > (getValue(MIXSRC_FIRST_POT+i) >> 3) ? '\300' : '\301'); break; } @@ -2438,11 +2438,11 @@ void checkSwitches() for (uint8_t i=0; i0?(i+3):(states&0x3)+1), attr); + attr = (states & (1 << (i+1))) == (switches_states & (1 << (i+1))) ? 0 : INVERS; + if (!(g_model.nSwToWarn & (1<0?(i+3):(states&0x3)+1), attr); x += 3*FW+FW/2; } #endif From f2f9579b77763026c815042bd6ab7e2d00819a46 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 20 Feb 2014 19:51:32 +0100 Subject: [PATCH 15/45] Automatic sounds for multipos switches --- radio/src/audio_arm.h | 6 +++--- radio/src/opentx.cpp | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index 41a170d7b..8c67fad5e 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -306,9 +306,9 @@ void pushPrompt(uint16_t prompt, uint8_t id=0); #if defined(SDCARD) void playModelEvent(uint8_t category, uint8_t index, uint8_t event=0); - #define PLAY_PHASE_OFF(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_OFF) - #define PLAY_PHASE_ON(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_ON) - #define PLAY_SWITCH_MOVED(sw) playModelEvent(SWITCH_AUDIO_CATEGORY, sw) + #define PLAY_PHASE_OFF(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_OFF) + #define PLAY_PHASE_ON(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_ON) + #define PLAY_SWITCH_MOVED(sw) playModelEvent(SWITCH_AUDIO_CATEGORY, sw) #else #define PLAY_PHASE_OFF(phase) #define PLAY_PHASE_ON(phase) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index ff8a7c1d8..7955f57b4 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1400,13 +1400,17 @@ void getSwitchesPosition(bool play) if (calib->count>0 && calib->countcount); uint8_t previousPos = potsPos[i] >> 4; + uint8_t previousStoredPos = potsPos[i] & 0x0F; if (pos != previousPos) { potsLastposStart[i] = get_tmr10ms(); - potsPos[i] = (pos << 4) | (potsPos[i] & 0x0f); + potsPos[i] = (pos << 4) | previousStoredPos; } else if ((tmr10ms_t)(get_tmr10ms() - potsLastposStart[i]) > DELAY_SWITCH_3POS) { potsLastposStart[i] = 0; - potsPos[i] = (pos << 4) | (pos); + potsPos[i] = (pos << 4) | pos; + if (play && previousStoredPos != pos) { + PLAY_SWITCH_MOVED(SWSRC_LAST_SWITCH+i*POTS_POS_COUNT+pos); + } } } } From bb774648ff594238bb85cb9ddbde9375f5c147a7 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 21 Feb 2014 12:16:05 +0100 Subject: [PATCH 16/45] P25 and P26 automatic prompts were not played --- radio/src/audio_arm.cpp | 4 ++-- radio/src/opentx.cpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 7f1d92d52..6a6d84010 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -118,12 +118,12 @@ const char * audioFilenames[] = { uint64_t sdAvailableSystemAudioFiles = 0; uint32_t sdAvailablePhaseAudioFiles = 0; -uint32_t sdAvailableSwitchAudioFiles = 0; +uint64_t sdAvailableSwitchAudioFiles = 0; uint64_t sdAvailableLogicalSwitchAudioFiles = 0; #define MASK_SYSTEM_AUDIO_FILE(index) ((uint64_t)1 << index) #define MASK_PHASE_AUDIO_FILE(index, event) ((uint32_t)1 << (2*index+event)) -#define MASK_SWITCH_AUDIO_FILE(index) ((uint32_t)1 << index) +#define MASK_SWITCH_AUDIO_FILE(index) ((uint64_t)1 << index) #define MASK_LOGICAL_SWITCH_AUDIO_FILE(index, event) ((uint64_t)1 << (2*index+event)) bool isFileAvailable(const char * filename) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 7955f57b4..7b5a609de 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1309,7 +1309,6 @@ getvalue_t getValue(uint8_t i) volatile GETSWITCH_RECURSIVE_TYPE s_last_switch_used = 0; volatile GETSWITCH_RECURSIVE_TYPE s_last_switch_value = 0; -/* recursive function. stack as of today (16/03/2012) grows by 8bytes at each call, which is ok! */ #if defined(CPUARM) uint32_t cswDelays[NUM_CSW]; @@ -1425,6 +1424,8 @@ void getSwitchesPosition(bool play) int16_t csLastValue[NUM_CSW]; #define CS_LAST_VALUE_INIT -32768 + +/* recursive function. stack as of today (16/03/2012) grows by 8bytes at each call, which is ok! */ bool getSwitch(int8_t swtch) { bool result; From 5dbf2063f81665acf39148528627765348b9e702 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 21 Feb 2014 14:47:38 +0100 Subject: [PATCH 17/45] 6-pos and 3-pos switches shouldn't be played at startup now --- radio/src/opentx.cpp | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 0f84855d8..c35f84ccb 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1327,7 +1327,7 @@ uint32_t switchesPos = 0; tmr10ms_t potsLastposStart[NUM_XPOTS]; uint8_t potsPos[NUM_XPOTS]; -uint32_t check2PosSwitchPosition(EnumKeys sw, bool play) +uint32_t check2PosSwitchPosition(EnumKeys sw, bool startup) { uint32_t result; uint32_t index; @@ -1339,7 +1339,7 @@ uint32_t check2PosSwitchPosition(EnumKeys sw, bool play) result = (1 << index); - if (play && !(switchesPos & result)) { + if (!startup && !(switchesPos & result)) { PLAY_SWITCH_MOVED(index); } @@ -1347,7 +1347,7 @@ uint32_t check2PosSwitchPosition(EnumKeys sw, bool play) } #define DELAY_SWITCH_3POS 10/*100ms*/ -uint32_t check3PosSwitchPosition(uint8_t idx, EnumKeys sw, bool play) +uint32_t check3PosSwitchPosition(uint8_t idx, EnumKeys sw, bool startup) { uint32_t result; uint32_t index; @@ -1362,7 +1362,7 @@ uint32_t check3PosSwitchPosition(uint8_t idx, EnumKeys sw, bool play) result = (1 << index); switchesMidposStart[idx] = 0; } - else if ((switchesPos & (1 << (sw - SW_SA0 + 1))) || (switchesMidposStart[idx] && (tmr10ms_t)(get_tmr10ms() - switchesMidposStart[idx]) > DELAY_SWITCH_3POS)) { + else if (startup || (switchesPos & (1 << (sw - SW_SA0 + 1))) || (switchesMidposStart[idx] && (tmr10ms_t)(get_tmr10ms() - switchesMidposStart[idx]) > DELAY_SWITCH_3POS)) { index = sw - SW_SA0 + 1; result = (1 << index); switchesMidposStart[idx] = 0; @@ -1375,17 +1375,17 @@ uint32_t check3PosSwitchPosition(uint8_t idx, EnumKeys sw, bool play) result = (switchesPos & (0x7 << (sw - SW_SA0))); } - if (play && !(switchesPos & result)) { + if (!startup && !(switchesPos & result)) { PLAY_SWITCH_MOVED(index); } return result; } -#define CHECK_2POS(sw) newPos |= check2PosSwitchPosition(sw ## 0, play) -#define CHECK_3POS(idx, sw) newPos |= check3PosSwitchPosition(idx, sw ## 0, play) +#define CHECK_2POS(sw) newPos |= check2PosSwitchPosition(sw ## 0, startup) +#define CHECK_3POS(idx, sw) newPos |= check3PosSwitchPosition(idx, sw ## 0, startup) -void getSwitchesPosition(bool play) +void getSwitchesPosition(bool startup) { uint32_t newPos = 0; CHECK_3POS(0, SW_SA); @@ -1409,10 +1409,10 @@ void getSwitchesPosition(bool play) potsLastposStart[i] = get_tmr10ms(); potsPos[i] = (pos << 4) | previousStoredPos; } - else if ((tmr10ms_t)(get_tmr10ms() - potsLastposStart[i]) > DELAY_SWITCH_3POS) { + else if (startup || (tmr10ms_t)(get_tmr10ms() - potsLastposStart[i]) > DELAY_SWITCH_3POS) { potsLastposStart[i] = 0; potsPos[i] = (pos << 4) | pos; - if (play && previousStoredPos != pos) { + if (!startup && previousStoredPos != pos) { PLAY_SWITCH_MOVED(SWSRC_LAST_SWITCH+i*POTS_POS_COUNT+pos); } } @@ -2460,14 +2460,15 @@ void checkSwitches() } } uint8_t potMode = g_model.nPotsToWarn >> 6; - if(potMode) { + if (potMode) { perOut(e_perout_mode_normal, 0); bad_pots = 0; - for (uint8_t i=0; i> 3)) > 2)) { - warn = true; - bad_pots |= (1<> 3)) > 2)) { + warn = true; + bad_pots |= (1<> (i*2)]; @@ -4018,7 +4019,7 @@ void doMixerCalculations() getADC(); - getSwitchesPosition(lastTMR != 0); + getSwitchesPosition(lastTMR == 0); #if defined(CPUARM) lastTMR = tmr10ms; From 095bb38c0375476d7397445a85df1ec0cbca075e Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 21 Feb 2014 15:18:05 +0100 Subject: [PATCH 18/45] Now logical switches automatic prompts --- radio/src/audio_arm.cpp | 4 +++- radio/src/audio_arm.h | 13 ++++++++++--- radio/src/opentx.cpp | 23 +++++++++++++++-------- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 6a6d84010..686c000f3 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -318,10 +318,12 @@ bool isAudioFileReferenced(uint32_t i, char * filename) return false; } +tmr10ms_t timeAutomaticPromptsSilence = 0; + void playModelEvent(uint8_t category, uint8_t index, uint8_t event) { char filename[AUDIO_FILENAME_MAXLEN+1]; - if (isAudioFileReferenced((category << 24) + (index << 16) + event, filename)) { + if ((get_tmr10ms()-timeAutomaticPromptsSilence > 10) && isAudioFileReferenced((category << 24) + (index << 16) + event, filename)) { audioQueue.playFile(filename); } } diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index 8c67fad5e..3f5ee974c 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -305,14 +305,21 @@ void pushPrompt(uint16_t prompt, uint8_t id=0); #define AUDIO_RESET() audioQueue.reset() #if defined(SDCARD) + extern tmr10ms_t timeAutomaticPromptsSilence; void playModelEvent(uint8_t category, uint8_t index, uint8_t event=0); - #define PLAY_PHASE_OFF(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_OFF) - #define PLAY_PHASE_ON(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_ON) - #define PLAY_SWITCH_MOVED(sw) playModelEvent(SWITCH_AUDIO_CATEGORY, sw) + #define PLAY_PHASE_OFF(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_OFF) + #define PLAY_PHASE_ON(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_ON) + #define PLAY_SWITCH_MOVED(sw) playModelEvent(SWITCH_AUDIO_CATEGORY, sw) + #define PLAY_LOGICAL_SWITCH_OFF(sw) playModelEvent(LOGICAL_SWITCH_AUDIO_CATEGORY, sw, AUDIO_EVENT_OFF) + #define PLAY_LOGICAL_SWITCH_ON(sw) playModelEvent(LOGICAL_SWITCH_AUDIO_CATEGORY, sw, AUDIO_EVENT_ON) + #define SKIP_AUTOMATIC_PROMPTS() timeAutomaticPromptsSilence = get_tmr10ms() #else #define PLAY_PHASE_OFF(phase) #define PLAY_PHASE_ON(phase) #define PLAY_SWITCH_MOVED(sw) + #define PLAY_LOGICAL_SWITCH_OFF(sw) + #define PLAY_LOGICAL_SWITCH_ON(sw) + #define SKIP_AUTOMATIC_PROMPTS() #endif void referenceSystemAudioFiles(); diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index c35f84ccb..2cb2b37a8 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1327,7 +1327,7 @@ uint32_t switchesPos = 0; tmr10ms_t potsLastposStart[NUM_XPOTS]; uint8_t potsPos[NUM_XPOTS]; -uint32_t check2PosSwitchPosition(EnumKeys sw, bool startup) +uint32_t check2PosSwitchPosition(EnumKeys sw) { uint32_t result; uint32_t index; @@ -1339,7 +1339,7 @@ uint32_t check2PosSwitchPosition(EnumKeys sw, bool startup) result = (1 << index); - if (!startup && !(switchesPos & result)) { + if (!(switchesPos & result)) { PLAY_SWITCH_MOVED(index); } @@ -1375,14 +1375,14 @@ uint32_t check3PosSwitchPosition(uint8_t idx, EnumKeys sw, bool startup) result = (switchesPos & (0x7 << (sw - SW_SA0))); } - if (!startup && !(switchesPos & result)) { + if (!(switchesPos & result)) { PLAY_SWITCH_MOVED(index); } return result; } -#define CHECK_2POS(sw) newPos |= check2PosSwitchPosition(sw ## 0, startup) +#define CHECK_2POS(sw) newPos |= check2PosSwitchPosition(sw ## 0) #define CHECK_3POS(idx, sw) newPos |= check3PosSwitchPosition(idx, sw ## 0, startup) void getSwitchesPosition(bool startup) @@ -1412,7 +1412,7 @@ void getSwitchesPosition(bool startup) else if (startup || (tmr10ms_t)(get_tmr10ms() - potsLastposStart[i]) > DELAY_SWITCH_3POS) { potsLastposStart[i] = 0; potsPos[i] = (pos << 4) | pos; - if (!startup && previousStoredPos != pos) { + if (previousStoredPos != pos) { PLAY_SWITCH_MOVED(SWSRC_LAST_SWITCH+i*POTS_POS_COUNT+pos); } } @@ -1650,10 +1650,14 @@ bool getSwitch(int8_t swtch) } #endif - if (result) + if (result) { + PLAY_LOGICAL_SWITCH_ON(cs_idx); s_last_switch_value |= mask; - else + } + else { + PLAY_LOGICAL_SWITCH_OFF(cs_idx); s_last_switch_value &= ~mask; + } } } @@ -2998,11 +3002,14 @@ void resetAll() #if defined(FRSKY) resetTelemetry(); #endif - for (uint8_t i=0; i Date: Fri, 21 Feb 2014 15:54:53 +0100 Subject: [PATCH 19/45] Compilation was broken --- radio/src/audio_avr.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/radio/src/audio_avr.h b/radio/src/audio_avr.h index 6302c13f4..691305655 100644 --- a/radio/src/audio_avr.h +++ b/radio/src/audio_avr.h @@ -157,5 +157,9 @@ void audioDefevent(uint8_t e); #define PLAY_PHASE_OFF(phase) #define PLAY_PHASE_ON(phase) +#define PLAY_SWITCH_MOVED(sw) +#define PLAY_LOGICAL_SWITCH_OFF(sw) +#define PLAY_LOGICAL_SWITCH_ON(sw) +#define SKIP_AUTOMATIC_PROMPTS() #endif From 5f560e8d1b2815267f118be59c9269ed42357d66 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 21 Feb 2014 15:57:00 +0100 Subject: [PATCH 20/45] No more parsing of all system sounds. Automatic prompts silent after alerts --- radio/src/audio_arm.cpp | 66 +++++++++++++++++++++++++++++++---------- radio/src/buzzer.h | 4 +++ radio/src/opentx.cpp | 2 ++ radio/src/sdcard.h | 2 +- 4 files changed, 57 insertions(+), 17 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 686c000f3..671547add 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -135,26 +135,63 @@ bool isFileAvailable(const char * filename) return f_stat(filename, &info) == FR_OK; } +char * getAudioPath(char * path) +{ + strcpy(path, SOUNDS_PATH "/"); + strncpy(path+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); + return path + sizeof(SOUNDS_PATH); +} + +char * getSystemAudioPath(char * path) +{ + char * str = getAudioPath(path); + strcpy(path, SYSTEM_SUBDIR "/"); + return str + sizeof(SYSTEM_SUBDIR); +} + void getSystemAudioFile(char * filename, int index) { - strcpy(filename, SYSTEM_SOUNDS_PATH "/"); - strncpy(filename+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - strcpy(filename+sizeof(SYSTEM_SOUNDS_PATH), audioFilenames[index]); - strcat(filename+sizeof(SYSTEM_SOUNDS_PATH), SOUNDS_EXT); + char * str = getAudioPath(filename); + strcpy(str, audioFilenames[index]); + strcat(str, SOUNDS_EXT); } void referenceSystemAudioFiles() { - char filename[AUDIO_FILENAME_MAXLEN+1]; + char path[AUDIO_FILENAME_MAXLEN+1]; + FILINFO fno; + DIR dir; + char *fn; /* This function is assuming non-Unicode cfg. */ + TCHAR lfn[_MAX_LFN + 1]; + fno.lfname = lfn; + fno.lfsize = sizeof(lfn); + uint64_t availableAudioFiles = 0; assert(sizeof(audioFilenames)==AU_FRSKY_FIRST*sizeof(char *)); assert(sizeof(sdAvailableSystemAudioFiles)*8 >= AU_FRSKY_FIRST); - for (int i=0; iid, 2); - + char filename[AUDIO_FILENAME_MAXLEN+1]; + char * str = getSystemAudioPath(filename); + strcpy(str, "0000" SOUNDS_EXT); for (int8_t i=3; i>=0; i--) { - filename[sizeof(SYSTEM_SOUNDS_PATH)+i] = '0' + (prompt%10); + str[i] = '0' + (prompt%10); prompt /= 10; } - audioQueue.playFile(filename, 0, id); - #endif } diff --git a/radio/src/buzzer.h b/radio/src/buzzer.h index cbb4d5717..6d901bbbb 100644 --- a/radio/src/buzzer.h +++ b/radio/src/buzzer.h @@ -102,6 +102,10 @@ void beep(uint8_t val); #define PLAY_PHASE_OFF(phase) #define PLAY_PHASE_ON(phase) + #define PLAY_SWITCH_MOVED(sw) + #define PLAY_LOGICAL_SWITCH_OFF(sw) + #define PLAY_LOGICAL_SWITCH_ON(sw) + #define SKIP_AUTOMATIC_PROMPTS() #endif #if !defined(CPUARM) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 2cb2b37a8..44cdcf50a 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -2347,6 +2347,8 @@ void checkAll() #endif clearKeyEvents(); + + SKIP_AUTOMATIC_PROMPTS(); } #if defined(MODULE_ALWAYS_SEND_PULSES) diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h index 07e528a68..ccbad5fa6 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -44,7 +44,7 @@ #define LOGS_PATH ROOT_PATH "LOGS" // no trailing slash = important #define SOUNDS_PATH ROOT_PATH "SOUNDS/en" // no trailing slash = important #define SOUNDS_PATH_LNG_OFS (sizeof(SOUNDS_PATH)-3) -#define SYSTEM_SOUNDS_PATH SOUNDS_PATH "/SYSTEM" // no trailing slash = important +#define SYSTEM_SUBDIR "SYSTEM" // no trailing slash = important #define BITMAPS_PATH ROOT_PATH "BMP" #define SCRIPTS_PATH ROOT_PATH "SCRIPTS" From 03451730396f901983e0c2db891f5f5cdac5c88a Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 21 Feb 2014 15:57:00 +0100 Subject: [PATCH 21/45] No more parsing of all system sounds. Automatic prompts silent after alerts --- radio/src/audio_arm.cpp | 66 +++++++++++++++++++++++++++++++---------- radio/src/buzzer.h | 4 +++ radio/src/opentx.cpp | 2 ++ radio/src/sdcard.h | 2 +- 4 files changed, 57 insertions(+), 17 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 686c000f3..b1229f1cc 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -135,26 +135,63 @@ bool isFileAvailable(const char * filename) return f_stat(filename, &info) == FR_OK; } +char * getAudioPath(char * path) +{ + strcpy(path, SOUNDS_PATH "/"); + strncpy(path+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); + return path + sizeof(SOUNDS_PATH); +} + +char * getSystemAudioPath(char * path) +{ + char * str = getAudioPath(path); + strcpy(str, SYSTEM_SUBDIR "/"); + return str + sizeof(SYSTEM_SUBDIR); +} + void getSystemAudioFile(char * filename, int index) { - strcpy(filename, SYSTEM_SOUNDS_PATH "/"); - strncpy(filename+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - strcpy(filename+sizeof(SYSTEM_SOUNDS_PATH), audioFilenames[index]); - strcat(filename+sizeof(SYSTEM_SOUNDS_PATH), SOUNDS_EXT); + char * str = getAudioPath(filename); + strcpy(str, audioFilenames[index]); + strcat(str, SOUNDS_EXT); } void referenceSystemAudioFiles() { - char filename[AUDIO_FILENAME_MAXLEN+1]; + char path[AUDIO_FILENAME_MAXLEN+1]; + FILINFO fno; + DIR dir; + char *fn; /* This function is assuming non-Unicode cfg. */ + TCHAR lfn[_MAX_LFN + 1]; + fno.lfname = lfn; + fno.lfsize = sizeof(lfn); + uint64_t availableAudioFiles = 0; assert(sizeof(audioFilenames)==AU_FRSKY_FIRST*sizeof(char *)); assert(sizeof(sdAvailableSystemAudioFiles)*8 >= AU_FRSKY_FIRST); - for (int i=0; iid, 2); - + char filename[AUDIO_FILENAME_MAXLEN+1]; + char * str = getSystemAudioPath(filename); + strcpy(str, "0000" SOUNDS_EXT); for (int8_t i=3; i>=0; i--) { - filename[sizeof(SYSTEM_SOUNDS_PATH)+i] = '0' + (prompt%10); + str[i] = '0' + (prompt%10); prompt /= 10; } - audioQueue.playFile(filename, 0, id); - #endif } diff --git a/radio/src/buzzer.h b/radio/src/buzzer.h index cbb4d5717..6d901bbbb 100644 --- a/radio/src/buzzer.h +++ b/radio/src/buzzer.h @@ -102,6 +102,10 @@ void beep(uint8_t val); #define PLAY_PHASE_OFF(phase) #define PLAY_PHASE_ON(phase) + #define PLAY_SWITCH_MOVED(sw) + #define PLAY_LOGICAL_SWITCH_OFF(sw) + #define PLAY_LOGICAL_SWITCH_ON(sw) + #define SKIP_AUTOMATIC_PROMPTS() #endif #if !defined(CPUARM) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 2cb2b37a8..44cdcf50a 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -2347,6 +2347,8 @@ void checkAll() #endif clearKeyEvents(); + + SKIP_AUTOMATIC_PROMPTS(); } #if defined(MODULE_ALWAYS_SEND_PULSES) diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h index 07e528a68..ccbad5fa6 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -44,7 +44,7 @@ #define LOGS_PATH ROOT_PATH "LOGS" // no trailing slash = important #define SOUNDS_PATH ROOT_PATH "SOUNDS/en" // no trailing slash = important #define SOUNDS_PATH_LNG_OFS (sizeof(SOUNDS_PATH)-3) -#define SYSTEM_SOUNDS_PATH SOUNDS_PATH "/SYSTEM" // no trailing slash = important +#define SYSTEM_SUBDIR "SYSTEM" // no trailing slash = important #define BITMAPS_PATH ROOT_PATH "BMP" #define SCRIPTS_PATH ROOT_PATH "SCRIPTS" From d02912577b22462c491ddd78d8f328d84e3577c0 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 21 Feb 2014 16:51:51 +0100 Subject: [PATCH 22/45] Merge problem :( --- radio/src/audio_arm.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 678d173e0..b1229f1cc 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -145,11 +145,7 @@ char * getAudioPath(char * path) char * getSystemAudioPath(char * path) { char * str = getAudioPath(path); -<<<<<<< HEAD strcpy(str, SYSTEM_SUBDIR "/"); -======= - strcpy(path, SYSTEM_SUBDIR "/"); ->>>>>>> 5f560e8d1b2815267f118be59c9269ed42357d66 return str + sizeof(SYSTEM_SUBDIR); } From a7bba2a578b1f6a42b44169d3988b7feeeaa12d9 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 21 Feb 2014 16:55:43 +0100 Subject: [PATCH 23/45] Logical switches automatic prompts bugfix --- radio/src/opentx.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 44cdcf50a..6ce62a3f6 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1651,11 +1651,11 @@ bool getSwitch(int8_t swtch) #endif if (result) { - PLAY_LOGICAL_SWITCH_ON(cs_idx); + if (!(s_last_switch_value&mask)) PLAY_LOGICAL_SWITCH_ON(cs_idx); s_last_switch_value |= mask; } else { - PLAY_LOGICAL_SWITCH_OFF(cs_idx); + if (s_last_switch_value&mask) PLAY_LOGICAL_SWITCH_OFF(cs_idx); s_last_switch_value &= ~mask; } } @@ -3405,7 +3405,7 @@ void evalFunctions() if (active || IS_PLAY_BOTH_FUNC(CFN_FUNC(sd))) { - switch(CFN_FUNC(sd)) { + switch (CFN_FUNC(sd)) { case FUNC_SAFETY_CHANNEL: safetyCh[CFN_CH_INDEX(sd)] = CFN_PARAM(sd); From 9b5b22658a392759e3a9863225b6b22e502ba262 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 21 Feb 2014 17:09:03 +0100 Subject: [PATCH 24/45] Cosmetics --- radio/src/opentx.cpp | 43 +++++++------------------------------------ 1 file changed, 7 insertions(+), 36 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 6ce62a3f6..4d49662cf 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1688,53 +1688,24 @@ int8_t getMovedSwitch() } } #else - // saves about 50 bytes flash // return delivers 1 to 3 for ID1 to ID3 // 4..8 for all other switches if changed to true // -4..-8 for all other switches if changed to false // 9 for Trainer switch if changed to true; Change to false is ignored - - swstate_t mask=0x80; + swstate_t mask = 0x80; for (uint8_t i=NUM_PSWITCH; i>1; i--) { bool prev; - // mask= (1<<(i-2)); - prev=(switches_states & mask); + prev = (switches_states & mask); // don't use getSwitch here to always get the proper value, even getSwitch manipulates - // bool next = getSwitch(i); - bool next = switchState((EnumKeys)(SW_BASE+i-1)); - if (prev!=next) { - if (((i3)) || next==true) - result = next ? i : -i; - if ((i<=3) && (result==0)) result=1; - switches_states ^= mask; - } - mask>>=1; - } //endfor - -/* - for (uint8_t i=NUM_PSWITCH; i>0; i--) { - bool prev; - swstate_t mask = 0; - if (i <= 3) { - prev = ((switches_states & 0x03) == (i-1)); - } - else { - mask = (1<<(i-2)); - prev = (switches_states & mask); - } - // don't use getSwitch here to always get the proper value, because getSwitch manipulates - // bool next = getSwitch(i); bool next = switchState((EnumKeys)(SW_BASE+i-1)); if (prev != next) { - if (i!=NUM_PSWITCH || next==true) + if (((i3)) || next==true) result = next ? i : -i; - if (mask) - switches_states ^= mask; - else { - switches_states = (switches_states & 0xFC) | (i-1); - } + if (i<=3 && result==0) result = 1; + switches_states ^= mask; } - } //endfor */ + mask >>= 1; + } #endif if ((tmr10ms_t)(get_tmr10ms() - s_move_last_time) > 10) From 9c38236a30139eefdafd3b06ea94540e8266e2cb Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 21 Feb 2014 17:50:34 +0100 Subject: [PATCH 25/45] Another bug in system prompts referencing --- radio/src/audio_arm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index b1229f1cc..4ecc3f499 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -151,7 +151,7 @@ char * getSystemAudioPath(char * path) void getSystemAudioFile(char * filename, int index) { - char * str = getAudioPath(filename); + char * str = getSystemAudioPath(filename); strcpy(str, audioFilenames[index]); strcat(str, SOUNDS_EXT); } From 92a5429ce0b5c8c58b0d9e4bf1e124c505476242 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Fri, 21 Feb 2014 23:22:06 +0100 Subject: [PATCH 26/45] Longer inhibition time for automatic switch prompts at power up --- radio/src/audio_arm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 4ecc3f499..8e9f4a741 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -360,7 +360,7 @@ tmr10ms_t timeAutomaticPromptsSilence = 0; void playModelEvent(uint8_t category, uint8_t index, uint8_t event) { char filename[AUDIO_FILENAME_MAXLEN+1]; - if ((get_tmr10ms()-timeAutomaticPromptsSilence > 10) && isAudioFileReferenced((category << 24) + (index << 16) + event, filename)) { + if ((get_tmr10ms()-timeAutomaticPromptsSilence > 50) && isAudioFileReferenced((category << 24) + (index << 16) + event, filename)) { audioQueue.playFile(filename); } } From 82e74a72e6afc6b33d3db52070e1112802bd1443 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 22 Feb 2014 11:13:42 +0100 Subject: [PATCH 27/45] Shift in sources when 7 Lua scripts allowed --- companion/src/firmwares/opentx/opentxeeprom.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 3b3259803..ef971d41e 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -164,7 +164,7 @@ class SourcesConversionTable: public ConversionTable { if (IS_TARANIS(board) && version >= 216) { for (int i=0; i<32; i++) addConversion(RawSource(SOURCE_TYPE_VIRTUAL_INPUT, i), val++); - for (int i=0; i<3; i++) { + for (int i=0; i<7; i++) { for (int j=0; j<6; j++) { addConversion(RawSource(SOURCE_TYPE_LUA_INPUT, i*16+j), val++); } From f3b9135a09becce7d32440a9ae7351cfcbdfc876 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 22 Feb 2014 12:32:28 +0100 Subject: [PATCH 28/45] Core in Custom Functions Panel --- companion/src/modeledit/customfunctions.cpp | 30 +++++++++++---------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/companion/src/modeledit/customfunctions.cpp b/companion/src/modeledit/customfunctions.cpp index c9ba53ba5..b1805df46 100644 --- a/companion/src/modeledit/customfunctions.cpp +++ b/companion/src/modeledit/customfunctions.cpp @@ -162,7 +162,8 @@ CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData & model, #ifdef PHONON playBT[i] = new QPushButton(this); - playBT[i]->setObjectName(QString("play_%1").arg(i)); + playBT[i]->setProperty("index", i); + playBT[i]->setProperty("state", "play"); playBT[i]->setIcon(CompanionIcon("play.png")); paramLayout->addWidget(playBT[i]); connect(playBT[i], SIGNAL(pressed()), this, SLOT(playMusic())); @@ -222,42 +223,43 @@ void CustomFunctionsPanel::mediaPlayer_state(Phonon::State newState, Phonon::Sta void CustomFunctionsPanel::playMusic() { - QPushButton *playButton = qobject_cast(sender()); - int index=playButton->objectName().mid(5,2).toInt(); - QString function=playButton->objectName().left(4); - QString path = g.profile[g.id()].sdPath(); + QPushButton * button = qobject_cast(sender()); + int index = button->property("index").toInt(); + QString function = button->property("state").toString(); + QString path = g.profile[g.id()].sdPath(); QDir qd(path); QString track; if (qd.exists()) { if (GetEepromInterface()->getCapability(VoicesAsNumbers)) { - track=path+QString("/%1.wav").arg(int(fswtchParam[index]->value()),4,10,(const QChar)'0'); + track = path + QString("/%1.wav").arg(int(fswtchParam[index]->value()), 4, 10, (const QChar)'0'); } else { path.append("/SOUNDS/"); QString lang = generalSettings.ttsLanguage; if (lang.isEmpty()) - lang="en"; + lang = "en"; path.append(lang); - if (fswtchParamArmT[index]->currentText()!="----") { - track=path+"/"+fswtchParamArmT[index]->currentText()+".wav"; + if (fswtchParamArmT[index]->currentText() != "----") { + track = path + "/" + fswtchParamArmT[index]->currentText() + ".wav"; } } QFile file(track); if (!file.exists()) { QMessageBox::critical(this, tr("Error"), tr("Unable to find sound file %1!").arg(track)); - track.clear(); + return; } #ifdef PHONON - if (function=="play" && !track.isEmpty()) { + if (function=="play") { clickObject->clear(); clickObject->setCurrentSource(Phonon::MediaSource(track)); clickObject->play(); - playBT[index]->setObjectName(QString("stop_%1").arg(index)); + playBT[index]->setProperty("state", "stop"); playBT[index]->setIcon(CompanionIcon("stop.png")); - } else { + } + else { clickObject->stop(); clickObject->clear(); - playBT[index]->setObjectName(QString("play_%1").arg(index)); + playBT[index]->setProperty("state", "play"); playBT[index]->setIcon(CompanionIcon("play.png")); } #endif From 6ea9b2c26aee9eff9d6d54df2c70e21b241cf28f Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Sun, 23 Feb 2014 01:28:49 +0100 Subject: [PATCH 29/45] The two image labels and complicatd logics replaced by a simpler 4-way image selection and a single image label that simply shows whatever image that will be used as radio splash screen. --- companion/src/appdata.h | 2 +- companion/src/burndialog.cpp | 310 ++++++++++++++--------------------- companion/src/burndialog.h | 19 ++- companion/src/burndialog.ui | 258 +++++++++-------------------- 4 files changed, 211 insertions(+), 378 deletions(-) diff --git a/companion/src/appdata.h b/companion/src/appdata.h index 210b8ae8f..7377bb4f0 100644 --- a/companion/src/appdata.h +++ b/companion/src/appdata.h @@ -124,7 +124,7 @@ class Profile: protected CompStoreObj QString splashFile() const; bool burnFirmware() const; bool renameFwFiles() const; - bool patchImage() const; + bool patchImage() const; //TODO This variable is unused and should be removed int channelOrder() const; int defaultMode() const; diff --git a/companion/src/burndialog.cpp b/companion/src/burndialog.cpp index 764f84ab8..05d7ef8ce 100644 --- a/companion/src/burndialog.cpp +++ b/companion/src/burndialog.cpp @@ -17,7 +17,18 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac hexType(Type) { ui->setupUi(this); - ui->libraryButton->setIcon(CompanionIcon("library.png")); + + if(!g.profile[g.id()].splashFile().isEmpty()){ + imageSource=PROFILE; + imageFile=g.profile[g.id()].splashFile(); + } + else{ + ui->useProfileImageCB->setDisabled(true); + imageSource=FIRMWARE; + imageFile=""; + } + updateUI(); + ui->SplashFrame->hide(); ui->FramFWInfo->hide(); ui->EEbackupCB->hide(); @@ -27,7 +38,6 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac ui->profile_label->hide(); ui->patchcalib_CB->hide(); ui->patchhw_CB->hide(); - ui->InvertColorButton->setDisabled(true); setWindowTitle(tr("Write firmware to TX")); if (IS_TARANIS(GetEepromInterface()->getBoard())) { ui->EEbackupCB->hide(); @@ -39,12 +49,7 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac ui->patchcalib_CB->hide(); ui->patchhw_CB->hide(); ui->EEpromCB->hide(); - ui->ImageLoadButton->setDisabled(true); - ui->libraryButton->setDisabled(true); - ui->InvertColorButton->setDisabled(true); ui->BurnFlashButton->setDisabled(true); - ui->ImageFileName->clear(); - ui->FwImage->clear(); ui->FWFileName->clear(); ui->DateField->clear(); ui->SVNField->clear(); @@ -124,12 +129,7 @@ void burnDialog::on_FlashLoadButton_clicked() { QString fileName; - ui->ImageLoadButton->setDisabled(true); - ui->libraryButton->setDisabled(true); - ui->InvertColorButton->setDisabled(true); ui->BurnFlashButton->setDisabled(true); - ui->ImageFileName->clear(); - ui->FwImage->clear(); ui->FWFileName->clear(); ui->DateField->clear(); ui->SVNField->clear(); @@ -169,6 +169,7 @@ void burnDialog::on_FlashLoadButton_clicked() QTimer::singleShot(0, this, SLOT(shrink())); } } + updateUI(); } void burnDialog::checkFw(QString fileName) @@ -194,48 +195,28 @@ void burnDialog::checkFw(QString fileName) ui->BurnFlashButton->setText(tr("Write to TX")); if (flash.hasSplash()) { ui->SplashFrame->show(); - ui->ImageLoadButton->setEnabled(true); - ui->libraryButton->setEnabled(true); - ui->FwImage->setFixedSize(flash.getSplashWidth(), flash.getSplashHeight()); ui->imageLabel->setFixedSize(flash.getSplashWidth(), flash.getSplashHeight()); - ui->FwImage->show(); - ui->FwImage->setPixmap(QPixmap::fromImage(flash.getSplash())); QString ImageStr = g.profile[g.id()].splashFile(); - bool PatchFwCB = g.profile[g.id()].patchImage(); if (!ImageStr.isEmpty()) { QImage Image; Image.load(ImageStr); ui->imageLabel->setPixmap(QPixmap::fromImage(Image.convertToFormat(flash.getSplashFormat()))); - ui->InvertColorButton->setEnabled(true); - ui->PreferredImageCB->setChecked(true); - ui->PatchFWCB->setChecked(PatchFwCB); } else { - QString fileName=ui->ImageFileName->text(); + QString fileName=imageFile; if (!fileName.isEmpty()) { QImage image(fileName); if (!image.isNull()) { - ui->InvertColorButton->setEnabled(true); ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()).convertToFormat(flash.getSplashFormat()))); - ui->PatchFWCB->setEnabled(true); - ui->PatchFWCB->setChecked(PatchFwCB); } else { - ui->PatchFWCB->setDisabled(true); - ui->PatchFWCB->setChecked(false); - ui->PreferredImageCB->setDisabled(true); } } else { - ui->PatchFWCB->setDisabled(true); - ui->PatchFWCB->setChecked(false); - ui->PreferredImageCB->setDisabled(true); } } } else { - ui->FwImage->hide(); - ui->ImageFileName->setText(""); ui->SplashFrame->hide(); } } @@ -338,87 +319,122 @@ bool burnDialog::checkeEprom(QString fileName) return true; } -void burnDialog::on_ImageLoadButton_clicked() +void burnDialog::displaySplash() +{ + QImage image; + if (imageSource == FIRMWARE){ + FlashInterface flash(ui->FWFileName->text()); + image = flash.getSplash(); + } + else{ + image.load(imageFile); + } + if (image.isNull()) { + return; + } + if (ui->imageLabel->width()!=128) { + image=image.convertToFormat(QImage::Format_RGB32); + QRgb col; + int gray; + int width = image.width(); + int height = image.height(); + for (int i = 0; i < width; ++i) + { + for (int j = 0; j < height; ++j) + { + col = image.pixel(i, j); + gray = qGray(col); + image.setPixel(i, j, qRgb(gray, gray, gray)); + } + } + ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()))); + } + else { + ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()).convertToFormat(QImage::Format_Mono))); + } +} + +void burnDialog::updateUI() +{ + ui->useProfileImageCB->setChecked( imageSource == PROFILE ); + ui->useFwImageCB->setChecked( imageSource == FIRMWARE ); + ui->useLibraryImageCB->setChecked( imageSource == LIBRARY ); + ui->useAnotherImageCB->setChecked( imageSource == ANOTHER ); + + displaySplash(); +} + +void burnDialog::on_useFwImageCB_clicked() +{ + QString fileName = ui->FWFileName->text(); + FlashInterface flash(fileName); + if (!flash.isValid()) { + QMessageBox::critical(this, tr("Error"), tr( "The firmware file is not valid." )); + return; + } + if (!flash.hasSplash()) { + QMessageBox::critical(this, tr("Error"), tr( "There is no start screen image in the firmware file." )); + return; + } + imageSource = FIRMWARE; + imageFile = fileName; + updateUI(); +} + +void burnDialog::on_useProfileImageCB_clicked() +{ + QString fileName = g.profile[g.id()].splashFile(); + if (fileName.isEmpty()){ + QMessageBox::critical(this, tr("Error"), tr( "The radio profile has no defined start screen." )); + return; + } + QImage image(fileName); + if (image.isNull()) { + QMessageBox::critical(this, tr("Error"), tr("The profile image %1 does not seem to contain an image.").arg(fileName)); + return; + } + imageSource = PROFILE; + imageFile = fileName; + updateUI(); +} + +void burnDialog::on_useAnotherImageCB_clicked() { QString supportedImageFormats; for (int formatIndex = 0; formatIndex < QImageReader::supportedImageFormats().count(); formatIndex++) { supportedImageFormats += QLatin1String(" *.") + QImageReader::supportedImageFormats()[formatIndex]; } - - QString fileName = QFileDialog::getOpenFileName(this, - tr("Open Image to load"), g.imagesDir(), tr("Images (%1)").arg(supportedImageFormats)); - - if (!fileName.isEmpty()) { - g.imagesDir( QFileInfo(fileName).dir().absolutePath() ); - QImage image(fileName); - if (image.isNull()) { - QMessageBox::critical(this, tr("Error"), tr("Cannot load %1.").arg(fileName)); - ui->PatchFWCB->setDisabled(true); - ui->PatchFWCB->setChecked(false); - ui->InvertColorButton->setDisabled(true); - return; - } - ui->ImageFileName->setText(fileName); - ui->InvertColorButton->setEnabled(true); - if (ui->imageLabel->width()!=128) { - image=image.convertToFormat(QImage::Format_RGB32); - QRgb col; - int gray; - int width = image.width(); - int height = image.height(); - for (int i = 0; i < width; ++i) { - for (int j = 0; j < height; ++j) { - col = image.pixel(i, j); - gray = qGray(col); - image.setPixel(i, j, qRgb(gray, gray, gray)); - } - } - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()))); - } - else { - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()).convertToFormat(QImage::Format_Mono))); - } - ui->PatchFWCB->setEnabled(true); + QString fileName = QFileDialog::getOpenFileName(this, tr("Open image file to use as Tx start screen"), g.imagesDir(), tr("Images (%1)").arg(supportedImageFormats)); + if (fileName.isEmpty()){ + return; } + g.imagesDir( QFileInfo(fileName).dir().absolutePath() ); + QImage image(fileName); + if (image.isNull()) { + QMessageBox::critical(this, tr("Error"), tr("Image could not be loaded from %1").arg(fileName)); + return; + } + imageSource = ANOTHER; + imageFile = fileName; + updateUI(); } -void burnDialog::on_libraryButton_clicked() +void burnDialog::on_useLibraryImageCB_clicked() { QString fileName; splashLibrary *ld = new splashLibrary(this,&fileName); ld->exec(); - if (!fileName.isEmpty()) { - QImage image(fileName); - if (image.isNull()) { - QMessageBox::critical(this, tr("Error"), tr("Cannot load %1.").arg(fileName)); - ui->PatchFWCB->setDisabled(true); - ui->PatchFWCB->setChecked(false); - ui->InvertColorButton->setDisabled(true); - return; - } - ui->ImageFileName->setText(fileName); - ui->InvertColorButton->setEnabled(true); - if (ui->imageLabel->width()!=128) { - image=image.convertToFormat(QImage::Format_RGB32); - QRgb col; - int gray; - int width = image.width(); - int height = image.height(); - for (int i = 0; i < width; ++i) - { - for (int j = 0; j < height; ++j) - { - col = image.pixel(i, j); - gray = qGray(col); - image.setPixel(i, j, qRgb(gray, gray, gray)); - } - } - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()))); - } else { - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()).convertToFormat(QImage::Format_Mono))); - } - ui->PatchFWCB->setEnabled(true); + if (fileName.isEmpty()) { + return; } + QImage image(fileName); + if (image.isNull()) { + QMessageBox::critical(this, tr("Error"), tr("The library image could not be loaded")); + return; + } + imageSource = LIBRARY; + imageFile = fileName; + updateUI(); } void burnDialog::on_BurnFlashButton_clicked() @@ -428,11 +444,10 @@ void burnDialog::on_BurnFlashButton_clicked() if (!fileName.isEmpty()) { g.flashDir( QFileInfo(fileName).dir().absolutePath() ); g.lastFw( fileName ); - if (ui->PatchFWCB->isChecked()) { - g.profile[g.id()].patchImage( true ); + if (!ui->useFwImageCB->isChecked()) { QImage image = ui->imageLabel->pixmap()->toImage().scaled(ui->imageLabel->width(), ui->imageLabel->height()); if (!image.isNull()) { - QString tempDir = QDir::tempPath(); + QString tempDir = QDir::tempPath(); QString tempFile; if (getFileType(fileName) == FILE_TYPE_HEX) tempFile = tempDir + "/flash.hex"; @@ -452,7 +467,6 @@ void burnDialog::on_BurnFlashButton_clicked() QMessageBox::critical(this, tr("Warning"), tr("Custom image not found")); } } else { - g.profile[g.id()].patchImage( false ); hexfileName->clear(); hexfileName->append(fileName); } @@ -610,15 +624,6 @@ void burnDialog::on_cancelButton_clicked() this->close(); } -void burnDialog::on_InvertColorButton_clicked() -{ - if (ui->imageLabel->pixmap()) { - QImage image = ui->imageLabel->pixmap()->toImage(); - image.invertPixels(); - ui->imageLabel->setPixmap(QPixmap::fromImage(image)); - } -} - void burnDialog::on_EEpromCB_toggled(bool checked) { if (ui->EEpromCB->isChecked()) { @@ -628,83 +633,6 @@ void burnDialog::on_EEpromCB_toggled(bool checked) } } -void burnDialog::on_PreferredImageCB_toggled(bool checked) -{ - QString tmpFileName; - if (checked) { - QString ImageStr = g.profile[g.id()].splashFile(); - if (!ImageStr.isEmpty()) { - QImage Image; - Image.load( ImageStr ); - if (ui->imageLabel->width()!=128) { - Image=Image.convertToFormat(QImage::Format_RGB32); - QRgb col; - int gray; - int width = Image.width(); - int height = Image.height(); - for (int i = 0; i < width; ++i) - { - for (int j = 0; j < height; ++j) - { - col = Image.pixel(i, j); - gray = qGray(col); - Image.setPixel(i, j, qRgb(gray, gray, gray)); - } - } - } else { - Image=Image.convertToFormat(QImage::Format_Mono); - } - ui->imageLabel->setPixmap(QPixmap::fromImage(Image)); - ui->InvertColorButton->setEnabled(true); - ui->PreferredImageCB->setChecked(true); - ui->ImageFileName->setDisabled(true); - ui->ImageLoadButton->setDisabled(true); - ui->libraryButton->setDisabled(true); - ui->PatchFWCB->setEnabled(true); - } - } else { - ui->imageLabel->clear(); - ui->ImageLoadButton->setEnabled(true); - ui->libraryButton->setEnabled(true); - tmpFileName = ui->ImageFileName->text(); - if (!tmpFileName.isEmpty()) { - QImage image(tmpFileName); - if (!image.isNull()) { - if (ui->imageLabel->width()!=128) { - image=image.convertToFormat(QImage::Format_RGB32); - QRgb col; - int gray; - int width = image.width(); - int height = image.height(); - for (int i = 0; i < width; ++i) - { - for (int j = 0; j < height; ++j) - { - col = image.pixel(i, j); - gray = qGray(col); - image.setPixel(i, j, qRgb(gray, gray, gray)); - } - } - } else { - image=image.convertToFormat(QImage::Format_Mono); - } - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()))); - ui->InvertColorButton->setEnabled(true); - ui->ImageFileName->setEnabled(true); - ui->PatchFWCB->setDisabled(false); - } else { - ui->InvertColorButton->setDisabled(true); - ui->PatchFWCB->setDisabled(true); - ui->PatchFWCB->setChecked(false); - } - } else { - ui->InvertColorButton->setDisabled(true); - ui->PatchFWCB->setDisabled(true); - ui->PatchFWCB->setChecked(false); - } - } -} - void burnDialog::shrink() { resize(0,0); diff --git a/companion/src/burndialog.h b/companion/src/burndialog.h index 40068f3ac..f56342133 100644 --- a/companion/src/burndialog.h +++ b/companion/src/burndialog.h @@ -36,18 +36,22 @@ public: private slots: void on_FlashLoadButton_clicked(); - void on_ImageLoadButton_clicked(); - void on_libraryButton_clicked(); void on_BurnFlashButton_clicked(); void on_cancelButton_clicked(); - void on_InvertColorButton_clicked(); void on_EEbackupCB_clicked(); - void on_PreferredImageCB_toggled(bool checked); - void on_EEpromCB_toggled(bool checked); - void checkFw(QString fileName); + void on_EEpromCB_toggled(bool checked); bool checkeEprom(QString fileName); + void on_useProfileImageCB_clicked(); + void on_useFwImageCB_clicked(); + void on_useLibraryImageCB_clicked(); + void on_useAnotherImageCB_clicked(); + + void checkFw(QString fileName); + void displaySplash(); + void updateUI(); void shrink(); + private: Ui::burnDialog *ui; QString * hexfileName; @@ -55,6 +59,9 @@ private: int hexType; RadioData radioData; bool burnraw; + enum ImageSource {FIRMWARE, PROFILE, LIBRARY, ANOTHER}; + ImageSource imageSource; + QString imageFile; }; #endif // BURNDIALOG_H diff --git a/companion/src/burndialog.ui b/companion/src/burndialog.ui index e86634e9a..89107b672 100644 --- a/companion/src/burndialog.ui +++ b/companion/src/burndialog.ui @@ -7,7 +7,7 @@ 0 0 440 - 418 + 423 @@ -30,21 +30,8 @@ :/icon.png:/icon.png - + - - - - Qt::Vertical - - - - 20 - 0 - - - - @@ -71,19 +58,6 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -100,19 +74,6 @@ - - - - Qt::Horizontal - - - - 48 - 20 - - - - @@ -152,56 +113,22 @@ QFrame::Raised - - - - - 0 - 0 - - - - - 128 - 64 - - - - - 212 - 64 - - - - QFrame::Panel - - - QFrame::Raised - - - - - - true - - - - - + + true - - + + - Date & Time + Variant - - + + true @@ -214,17 +141,17 @@ - - - - true + + + + Date & Time - - - - Variant + + + + true @@ -325,17 +252,10 @@ - - - - - - - Invert Color - - - - + + + + @@ -369,10 +289,50 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + - + + + Use firmware start screen + + + + + + + Use another start screen + + + + + 0 @@ -380,86 +340,14 @@ - Use image in settings - - - - - - - Substitute image in firmware + Use profile start screen - - - Qt::Vertical - - - - 20 - 13 - - - - - - - - Qt::Vertical - - - - 20 - 13 - - - - - - - - - - - - true - - - - 0 - 0 - - - - true - - - - - - - false - + - Load Image - - - - - - - Open Splash Library - - - ... - - - - 16 - 16 - + Use library start screen @@ -470,14 +358,24 @@ + + + + Qt::Vertical + + + + 20 + 0 + + + + FWFileName FlashLoadButton - ImageFileName - ImageLoadButton - libraryButton EEbackupCB EEpromCB cancelButton From eafc5b8359d7206c93f30d9865d8a1df056faac8 Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Sun, 23 Feb 2014 11:44:27 +0100 Subject: [PATCH 30/45] Fixed two assertion bugs I caused yesterday --- companion/src/burndialog.cpp | 63 +++++++++++------------------------- companion/src/burndialog.h | 2 ++ 2 files changed, 20 insertions(+), 45 deletions(-) diff --git a/companion/src/burndialog.cpp b/companion/src/burndialog.cpp index 05d7ef8ce..bb1a32bf0 100644 --- a/companion/src/burndialog.cpp +++ b/companion/src/burndialog.cpp @@ -9,6 +9,7 @@ #include "hexinterface.h" #include "appdata.h" +// Type 1 = Burn EEPROM, Type 2= Burn Flash burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * backupEE, QString DocName): QDialog(parent), ui(new Ui::burnDialog), @@ -27,13 +28,11 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac imageSource=FIRMWARE; imageFile=""; } - updateUI(); - ui->SplashFrame->hide(); ui->FramFWInfo->hide(); ui->EEbackupCB->hide(); ui->EEbackupCB->setCheckState(*backup ? Qt::Checked : Qt::Unchecked); - if (Type == 2) { + if (Type == FLASH_FILE_TYPE ) { ui->EEpromCB->hide(); ui->profile_label->hide(); ui->patchcalib_CB->hide(); @@ -68,7 +67,7 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac } if (!hexfileName->isEmpty()) { ui->FWFileName->setText(*hexfileName); - if (Type==2) { + if (Type==FLASH_FILE_TYPE) { checkFw(*hexfileName); } else { @@ -109,7 +108,7 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac ui->FlashLoadButton->hide(); hexfileName->clear(); } - else if (Type==2) { + else if (Type==FLASH_FILE_TYPE) { QString FileName; FileName = g.lastFw(); QFile file(FileName); @@ -117,6 +116,7 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac checkFw(FileName); } } + updateUI(); resize(0, 0); } @@ -139,7 +139,7 @@ void burnDialog::on_FlashLoadButton_clicked() ui->BurnFlashButton->setDisabled(true); ui->EEbackupCB->hide(); QTimer::singleShot(0, this, SLOT(shrink())); - if (hexType==2) { + if (hexType==FLASH_FILE_TYPE) { fileName = QFileDialog::getOpenFileName(this, tr("Open Firmware File"), g.flashDir(), FLASH_FILES_FILTER); checkFw(fileName); } @@ -177,6 +177,7 @@ void burnDialog::checkFw(QString fileName) if (fileName.isEmpty()) { return; } + if (!IS_TARANIS(GetEepromInterface()->getBoard())) { ui->EEbackupCB->show(); } @@ -191,40 +192,17 @@ void burnDialog::checkFw(QString fileName) ui->DateField->setText(flash.getDate() + " " + flash.getTime()); ui->SVNField->setText(flash.getSvn()); ui->ModField->setText(flash.getBuild()); - ui->BurnFlashButton->setEnabled(true); - ui->BurnFlashButton->setText(tr("Write to TX")); + + ui->SplashFrame->hide(); if (flash.hasSplash()) { ui->SplashFrame->show(); ui->imageLabel->setFixedSize(flash.getSplashWidth(), flash.getSplashHeight()); - QString ImageStr = g.profile[g.id()].splashFile(); - if (!ImageStr.isEmpty()) { - QImage Image; - Image.load(ImageStr); - ui->imageLabel->setPixmap(QPixmap::fromImage(Image.convertToFormat(flash.getSplashFormat()))); - } - else { - QString fileName=imageFile; - if (!fileName.isEmpty()) { - QImage image(fileName); - if (!image.isNull()) { - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()).convertToFormat(flash.getSplashFormat()))); - } - else { - } - } - else { - } - } - } - else { - ui->SplashFrame->hide(); } } else { - QMessageBox::warning(this, tr("Warning"), tr("%1 is not a known firmware").arg(fileName)); - ui->BurnFlashButton->setText(tr("Burn anyway !")); - ui->BurnFlashButton->setEnabled(true); + QMessageBox::warning(this, tr("Warning"), tr("%1 may not be a valid firmware file").arg(fileName)); } + ui->BurnFlashButton->setEnabled(true); QTimer::singleShot(0, this, SLOT(shrink())); g.flashDir( QFileInfo(fileName).dir().absolutePath() ); } @@ -356,6 +334,9 @@ void burnDialog::displaySplash() void burnDialog::updateUI() { + if (hexType==EEPROM_FILE_TYPE) + return; + ui->useProfileImageCB->setChecked( imageSource == PROFILE ); ui->useFwImageCB->setChecked( imageSource == FIRMWARE ); ui->useLibraryImageCB->setChecked( imageSource == LIBRARY ); @@ -439,7 +420,7 @@ void burnDialog::on_useLibraryImageCB_clicked() void burnDialog::on_BurnFlashButton_clicked() { - if (hexType==2) { + if (hexType==FLASH_FILE_TYPE) { QString fileName=ui->FWFileName->text(); if (!fileName.isEmpty()) { g.flashDir( QFileInfo(fileName).dir().absolutePath() ); @@ -475,7 +456,7 @@ void burnDialog::on_BurnFlashButton_clicked() hexfileName->clear(); } } - if (hexType==1) { + if (hexType==EEPROM_FILE_TYPE) { QString calib = g.profile[g.id()].stickPotCalib(); QString trainercalib = g.profile[g.id()].trainerCalib(); int potsnum=GetEepromInterface()->getCapability(Pots); @@ -626,11 +607,7 @@ void burnDialog::on_cancelButton_clicked() void burnDialog::on_EEpromCB_toggled(bool checked) { - if (ui->EEpromCB->isChecked()) { - *backup=true; - } else { - *backup=false; - } + *backup = ui->EEpromCB->isChecked(); } void burnDialog::shrink() @@ -640,9 +617,5 @@ void burnDialog::shrink() void burnDialog::on_EEbackupCB_clicked() { - if (ui->EEbackupCB->isChecked()) { - *backup=true; - } else { - *backup=false; - } + *backup = ui->EEbackupCB->isChecked(); } diff --git a/companion/src/burndialog.h b/companion/src/burndialog.h index f56342133..1ffac2b92 100644 --- a/companion/src/burndialog.h +++ b/companion/src/burndialog.h @@ -19,6 +19,8 @@ #define ER9X_EEPROM_FILE_TYPE "ER9X_EEPROM_FILE" #define EEPE_EEPROM_FILE_HEADER "EEPE EEPROM FILE" #define EEPE_MODEL_FILE_HEADER "EEPE MODEL FILE" +#define EEPROM_FILE_TYPE 1 +#define FLASH_FILE_TYPE 2 namespace Ui From 6f4cda74bc519e34a413b85d8a6117b1aae8fced Mon Sep 17 00:00:00 2001 From: Jacek Drewniak Date: Sun, 23 Feb 2014 15:50:24 +0100 Subject: [PATCH 31/45] Pl Transaltion fix --- companion/src/translations/companion_pl.ts | 1005 ++++++++++---------- 1 file changed, 499 insertions(+), 506 deletions(-) diff --git a/companion/src/translations/companion_pl.ts b/companion/src/translations/companion_pl.ts index 1715ded6f..bd3013a8a 100644 --- a/companion/src/translations/companion_pl.ts +++ b/companion/src/translations/companion_pl.ts @@ -168,57 +168,57 @@ FS%1 - + ON Włącz - + Error Błąd - + Unable to find sound file %1! Nie mogę odnaleźć pliku dźwiękowego %1! - + &Delete &Wykasuj - + Delete Wykasuj - + &Copy &Kopiuj - + Ctrl+C Ctrl+C - + &Cut &Wytnij - + Ctrl+X Ctrl+X - + &Paste &Wklej - + Ctrl+V Ctrl+V @@ -2064,7 +2064,7 @@ Jesteś pewien ? - + File loaded Plik załadowany @@ -2123,23 +2123,23 @@ Jesteś pewien ? - - - - - - - - + + + + + + + + Error Błąd - - - + + + Error opening file %1: %2. Błąd otwarcia pliku %1: @@ -2309,21 +2309,56 @@ Chcesz pobrać teraz? OpenTX Companion - FW: %1 - Profile: %2 OpenTX Companion - FW: %1 - Profil: %2 + + + About... + O aplikacji... + + + + Print... + Drukuj... + + + + Simulate... + Symulacja... + + + + Simulate current model + Symulacja aktualnego modelu + + + + Load Backup... + Załaduj backup... + + + + View Log File... + Obejrzyj plik logów... + + + + Open and view log file + Otwórz i obejrzyj plik logów + Edit Settings Edycja Ustawień + + + Settings... + Ustawienia... + Download firmware and voice files Pobierz firmware i pliki dźwiękowe - - - New Profile - Nowy Profil - Create a new Radio Setting Profile @@ -2334,6 +2369,78 @@ Chcesz pobrać teraz? A monochrome black icon theme Monochromatyczny czarny wygląd ikon + + + + Open Models and Settings file + Otwórz plik Modeli i Ustawień + + + + New Models+Settings + Nowe Modele+Ustawienia + + + + Create a new Models and Settings file + Utwórz nowy plik Modeli i Ustawień + + + + Open Models+Settings... + Otwórz Modele i Ustawienia... + + + + Save Models+Settings... + Zapisz Modele i Ustawienia... + + + + + Save Models and Settings file + Zapisz plik Modeli i Ustawień + + + + Save Models+Settings as... + Zapisz Modele+Ustawienia jako... + + + + Cut Model + Wytnij Model + + + + Cut current model to the clipboard + Wytnij aktualny model do schowka + + + + Copy Model... + Kopiuj Model... + + + + Copy current model to the clipboard + Wytnij aktualny model do schowka + + + + Paste Model... + Wklej Model... + + + + Paste model from clipboard + Wklaj Model ze schowka + + + + The classic companion9x icon theme + Klasyczny zestaw ikon Companion + A monochrome white icon theme @@ -2495,55 +2602,21 @@ Chcesz pobrać teraz? Użyj Rosyjskiego w menu - - About - O aplikacji + + + Radio Settings Profile + Profil Ustawień Radia - - Print - Drukuj + + Show recent Models+Settings documents + Pokaż ostatanie dokumenty Modeli i Ustawień Print current model Drukuj aktualny model - - - Simulate - Symulacja - - - - Simulate selected model - Symulacja wybranego modelu - - - - loadBackup... - Załaduj backup... - - - - Logs - Logi - - - - Setting... - Ustawienia... - - - - Downloads... - Pobieranie... - - - - Check for updates... - Sprawdź aktualizacje... - Check OpenTX and Companion updates @@ -2554,16 +2627,6 @@ Chcesz pobrać teraz? Edit Tx Splash Image... Edytor erkanu startowego radia... - - - edit the splash screen of your TX - Edytuj ekran startowy swojego radia - - - - List programmers - Lista programatorów - Fuses... @@ -2579,11 +2642,6 @@ Chcesz pobrać teraz? Open the OpenTX document page in a web browser Otwórz stronę dokumentacji OpenTX w przeglądarce - - - Configure connection software... - Ustawienia oprogramowania łączącego... - Save Tx Models and Settings to file @@ -2591,13 +2649,19 @@ Chcesz pobrać teraz? - Contributors - Współpracownicy + A tribute to those who have contributed to OpenTX and Companion + Hołd dla tych, którzy przyczynili się do rozwoju OpenTX i Companion - A tribute to those who have contributed to OpenTX and Companion - Hołd dla tych, którzy przyczynili się do rozwoju OpenTX i Companion + Contributors... + Współpracownicy... + + + + + Recent Models+Settings + Ostatnie Modele+Ustawienia @@ -2609,11 +2673,6 @@ Chcesz pobrać teraz? Set Icon Size Ustaw wielkość ikon - - - Radio Settings Profiles - Profile Ustawień Radia - A new version of Companion is available (version %1)<br>Would you like to download it? @@ -2667,11 +2726,6 @@ Chcesz pobrać teraz? The icon size will be used the next time you start Companion. Wybrana wiekość ikon będzie użyta po ponownym uruchomieniu Comapnion. - - - Open - Otwórz - @@ -2802,37 +2856,11 @@ Czy mimo wszystko zapisać? About Companion O aplikacji Companion - - - Create a new file - Utwórz nowy plik - - - - Open an existing file - Otwórz istniejący plik - Load backup from file Załaduj backup z pliku - - - - Save the document to disk - Zapisz dokument na dysku - - - - Open log file - Otwórz plik logów - - - - Show Companion changelog - Zobacz zmiany w Companion - Write Models and Settings to transmitter @@ -2848,56 +2876,11 @@ Czy mimo wszystko zapisać? Write Firmware Zapisz firmware - - - Open... - Otwórz... - - - - Save... - Zapisz... - - - - Save As... - Zapisz jako... - Exit Zakończ - - - Cut - Wytnij - - - - Cut current selection to the clipboard - Wytnij zaznaczenie do schowka - - - - Copy... - Kopiuj... - - - - Copy current selection to the clipboard - Wytnij zaznaczenie do schowka - - - - Paste... - Wklej... - - - - Paste clipboard into current selection - Wytnij zaznaczenie do schowka - Monochrome @@ -2923,11 +2906,71 @@ Czy mimo wszystko zapisać? Use system language in menus Użyj języka systemu w menu + + + Download... + Pobieranie... + + + + Check for Updates... + Sprawdź aktualizacje... + + + + Companion Changes... + Zmiany w Companion... + + + + Show Companion change log + Pokaż log zmian Companion + + + + Firmware Changes... + Zmiany w Firmware... + + + + Show firmware change log + Pokaż log zmian Firmware + + + + Compare Models... + Porównaj modele... + + + + Edit the splash image of your TX + Edytuj ekran startowy swojego radia + + + + List programmers... + Lista programistów... + Write firmware to transmitter Zapisz firmware do radia + + + Add Radio Profile + Dodaj profil radia + + + + Configure Communications... + Ustaw komunikację... + + + + Configure software for communicating with the transmitter + Ustaw oprogramowanie komunikacyjne z radiem + Write Models and Settings from file to Tx @@ -2964,46 +3007,26 @@ Czy mimo wszystko zapisać? Wczytaj Firmware z radia - - Configure software for reading from and writing to the transmitter - Ustawienia oprogramowania do odczytu i zapisu radia - - - + Write Zapis - - + + %2 + %2 + + + + Invalid Models and Settings File %1 Błędny plik %1 Modeli i Ustawień - + Invalid binary Models and Settings File %1 Błędny binarny plik %1 Modeli i Ustawień - - - ChangeLog... - Zmiany... - - - - Firmware ChangeLog... - Zmiany firmware... - - - - Show firmware changelog - Zobacz zmiany w firmware - - - - Compare... - Porównaj... - Compare models @@ -3034,22 +3057,6 @@ Czy mimo wszystko zapisać? Classical Klasyczny - - - The classical Companion icon theme - Klasyczny zestaw ikon Companion - - - - New - Nowy - - - - - Recent Files - Poprzednie pliki - Set Menu Language @@ -3062,13 +3069,13 @@ Czy mimo wszystko zapisać? Plik - - + + Edit Edycja - + Settings Ustawienia @@ -3079,42 +3086,27 @@ Czy mimo wszystko zapisać? - + Help Pomoc - - - Show a selection list of recent documents - Pokaż listę wyboru poprzednich dokumentów - - - - Radio Profiles - Profile Radia - Show a selection list of radio settings profiles Pokaż listę wyboru profili ustawiań radia - + Ready Gotowe - - &%1: %2 - &%1: %2 - - - + Unable to find file %1! Nie mogę znaleźć pliku %1! - + Error reading file %1: %2. Błąd odczytu pliku %1: @@ -3149,16 +3141,17 @@ Czy mimo wszystko zapisać? - - - - + + + + + Error Błąd - + Unable to find file %1! Nie mogę odnaleźć pliku %1! @@ -3166,7 +3159,7 @@ Czy mimo wszystko zapisać? - + Error opening file %1: %2. Błąd otwarcia pliku %1: @@ -3228,7 +3221,7 @@ Czy mimo wszystko zapisać? - + Error reading file %1: %2. Błąd odczytu pliku %1: @@ -3258,58 +3251,58 @@ Zapisać? - - + + Taranis radio not found Nie odnaleziono Radia Taranis - - + + Impossible to identify the radio on your system, please verify the eeprom disk is connected. Identyfikacja radia w Twoim systemie nie jest możliwa, sprawdź dysk eeprom podpięty do komputera. - - - + + + Backup EEPROM From Tx Backup EEPROM z radia - + Cannot check eeprom compatibility! Continue anyway? Nie mogę sprawdzić kompatybilności EEprom! Kontynuować ? - - + + Warning Ostrzeżenie - + Firmware in radio is of a different family of eeprom written, check file and preferences! Firmware w radiu jest różny od zapisanego eepromu, sprawdź plik i ustawienia! - + Firmware in flash is outdated, please upgrade! Firmware w radiu jest przestarzały. Proszę zaktualizować! - + Write EEPROM To Tx Zapis EEPROM do radia - - Open - Otwórz + + Open backup Models and Settings file + Otwórz plik backupu Modeli i Ustawień - + Invalid binary backup File %1 nieprawidłowy binarny plik %1 @@ -4202,14 +4195,14 @@ p, li { white-space: pre-wrap; } - + REa Pokrętło :a - + REb Pokrętło :b @@ -5160,7 +5153,7 @@ p, li { white-space: pre-wrap; } - + Warning Ostrzeżenie @@ -5280,22 +5273,22 @@ p, li { white-space: pre-wrap; } ASpd - + ASpd dTE - + dTE Cel- - + Cel- Vfs- - + Vfs- @@ -5340,22 +5333,22 @@ p, li { white-space: pre-wrap; } ABS - + ABS THs - + THs TH% - + TH% THt - + THt @@ -5574,7 +5567,7 @@ p, li { white-space: pre-wrap; } <font color=red><b>Niespójny parametr</b></font> - + Rotary Encoder Pokrętło @@ -5589,123 +5582,123 @@ p, li { white-space: pre-wrap; } Faza lotu %1 - + Yellow Żółty - + Orange Pomarańczowy - + Red Czerwony - + Winged Shadow How High - + Winged Shadow How High (not supported) Winged Shadow How High (nie obsługiwane) - + FrSky Sensor Hub Hub sensora FrSky - - + + None Żaden - + Imperial Imperialne - + Metric Metryczne - + Extra Fine Bardzo dokładne - + Fine Dokładne - + Medium Średni - + Coarse Gruby - + Exponential Eksponencjalny - + Count Up Licz - + Count Down Odliczaj - + %1:%2, - + : %1 Channels, %2usec Delay :Kanały %1, opóźnienie %2usX - + Flight modes(%1) Fazy lotu(%1) - + Flight mode(%1) Faza lotu (%1) - + Rudder SK - + Elevator SW - + Throttle Gaz - + Aileron Lotki @@ -5717,7 +5710,7 @@ p, li { white-space: pre-wrap; } - + --- @@ -5780,7 +5773,7 @@ p, li { white-space: pre-wrap; } - + Timer1 @@ -5788,21 +5781,21 @@ p, li { white-space: pre-wrap; } - + Timer2 - + All Wszystkie - + Telemetry Telemetria @@ -5835,22 +5828,22 @@ p, li { white-space: pre-wrap; } - + Value Wartość - + Source Źródło - + GVAR Zmienna - + Increment Zwiększanie @@ -5894,7 +5887,7 @@ p, li { white-space: pre-wrap; } ZG%1 - + Simulator for this firmware is not yet available Nie jest dostępny symulator dla tego firmware @@ -5972,17 +5965,17 @@ Zespół OpenTX/Companion. Użyj trymerów dla Fazy Lotu %1 + Własne trymery jako offset - + FW: %1 FW:%1 - + Pict: %1 Obrazek:%1 - + Profile image Obrazek Profilu @@ -6219,27 +6212,27 @@ Wolne obroty będą na górze, trymer i ostrzeżenie o otwartym gazie również TRN - + TRN GEA - + GEA ID0 - + ID0 ID1 - + DI1 ID2 - + ID2 @@ -6314,13 +6307,13 @@ Wolne obroty będą na górze, trymer i ostrzeżenie o otwartym gazie również SD - + SD SC - + SC @@ -6334,25 +6327,25 @@ Wolne obroty będą na górze, trymer i ostrzeżenie o otwartym gazie również S2 - + S2 SG - + SG RS - + RS SH - + SH @@ -6366,38 +6359,38 @@ Wolne obroty będą na górze, trymer i ostrzeżenie o otwartym gazie również S1 - + S1 SB - + SB SA - + SA SE - + SE SF - + SF LS - + LS @@ -6873,25 +6866,25 @@ Wolne obroty będą na górze, trymer i ostrzeżenie o otwartym gazie również appPreferencesDialog - + Simulator capture folder Katalog zapisu symulatora - + Remember simulator switch values Zapamiętaj ustawienia przełączników w symulatorze - - - - + + + + Open Folder Otwórz katalog - + User Splash Screens Użyj ekranu powitalnego @@ -6901,47 +6894,52 @@ Wolne obroty będą na górze, trymer i ostrzeżenie o otwartym gazie również Edycja Ustawień - + Application Settings Ustawienia Aplikacji - + + Only show user splash images + Pokaż tylko ekrany powitalne użytkownika + + + + Show user and companion splash images + Pokaż ekrany powitalne użytkownika i Companion + + + Simulator Settings Ustawienia Symulatora - + Blue Niebieskie - + Green Zielone - + Red Czerwone - + Orange Pomarańczowe - + Yellow Żółte - - Radio Settings - Ustawienia Radia - - - + Mode selection: Mode 1: @@ -6964,27 +6962,27 @@ Mode 4: - + Mode 1 (RUD ELE THR AIL) Mod 1 (SK.SW.Gaz.Lot) - + Mode 2 (RUD THR ELE AIL) Mod 2 (SK.Gaz.SW.Lot) - + Mode 3 (AIL ELE THR RUD) - + Mode 4 (AIL THR ELE RUD) Mod 4 (Lot.Gaz.SW.SK) - + Channel order This is used by the templated to determine which channel goes to what number output. @@ -6993,313 +6991,308 @@ This is used by the templated to determine which channel goes to what number out To ustawienie jest używane przez szablony, określa jakie wyjście przypisane jest do kanału. - + R E T A K W G L - + R E A T K W L G - + R T E A - + R T A E K G L W - + R A E T K L W G - + R A T E K L G W - + E R T A W K G L - + E R A T W K L G - + E T R A W G K L - + E T A R W G L K - + E A R T W L K G - + E A T R W L G K - + T R E A G K W L - + T R A E G K L W - + T E R A G W K L - + T E A R G W L K - + T A R E G L K W - + T A E R G L W K - + A R E T L K W G - + A R T E L R G W - + A E R T L W K G - + A E T R L W G K - + A T R E L G K W - + A T E R L G W K - + Default Stick Mode Bazowy mod drążków - - Settings Profile - Ustawienia Profilu - - - + Splash Screen Ekran startowy - + Channel Order Kolejność kanałów - + Append version number to FW file name Dodaj numer Firmware do nazwy pliku - + SD Structure path Struktura karty SD - + Select Image Wybierz obrazek - + Offer to write FW to Tx after download Zaproponuj zapisanie FirmWare do radia po pobraniu - + + Radio Settings Profile + Profil Ustawień Radia + + + + Profile Name + Nazwa profilu + + + Remove Profile Usuń Profil - + Clear Image Wyczyść obrazek - + Firmware Firmware - - Include companion splashes - Załącz ekrany powitalne - - - - Only user defined splashes - Tylko własne ekrany powitalne - - - + Splash Screen Library Biblioteka ekranół powitalnych - + Files to keep Pkili to zapamiętania - + Simulator BackLight Podświetlenie symularota - + Automatic Backup Folder Automatyczny Katalog Backupów - + Only capture to clipboard Przechwyć tylko do schowka - + Joystick Joystick - + Find Executable Znajdź plik wykonywalny - + Google Earth Executable Plik wykonywalny Google Earth - + Calibrate Kalibracja - + Enable Aktywowany - + Show splash screen when Companion starts Pokaz ekran startowy przy uruchamianiu Companion - + Automatic check for OpenTX firmware updates Automatycznie sprawdź aktualizacje firmware OpenTX - + Automatic check for Companion updates Automatycznie sprawdź aktualizacje Companion - + Offer to use wizard for new models Zaproponuj użycie konfiguratora dla nowych modeli - + Enable automatic backup before writing firmware Uaktywnij automatyczny backup przed zapisem firmware - + Select your snapshot folder Katalog zrzutów - - + + No joysticks found Brak oysticka - + Select your library folder Wybierz katalog bibliteki - + Select your Models and Settings backup folder Wybierz folder do backupowania Modeli i Ustawień - + Select Google Earth executable Wybierz wykonywalny plik Google Earth - + Select the folder replicating your SD structure Wybierz folder do zreplikowania struktury Twojej karty SD - + Not possible to remove profile Usunięcie profilu jest niemożliwe - + The default profile can not be removed. Podstawowy profil nie moze być usunięty. - + Open Image to load Otwórz obrazek do załadowania - + Images (%1) Obrazki (%1) @@ -7795,53 +7788,48 @@ m2560 dla platformy V4 Aktualny profil - - Open - Otwórz - - - - - - - - + + + + + + Warning Ostrzeżenie - + %1 is not a known firmware %1 nie jest znanym firmware - + Burn anyway ! Wypiecz mimo wszystko ! - - - - - - - - - - + + + + + + + + + + Error Błąd - + Unable to find file %1! Nie mogę odnaleźć pliku %1! - - - + + + Error opening file %1: %2. Błąd otwarcia pliku %1: @@ -7857,76 +7845,81 @@ m2560 dla platformy V4 Write Models and Settings in %1 to TX Zapisz Modele i Ustawienia w %1 do radia + + + Open Firmware File + Otwórz plik Firmware + Choose file to load Models and Settings from Wybierz plik Modeli i Ustawien do wczytania - - - + + + Invalid binary Models and Settings File %1, Proceed anyway ? Nieprawidłowy plik Modeli i Ustawień : %1. Kontynuować ? - + Error reading file %1: %2. Błąd odczytu pliku %1: %2. - + Open Image to load Otwórz plik z logo - + Images (%1) Obrazki (%1) - - + + Cannot load %1. Nie mogę załadować %1. - + Cannot save customized firmware Nie mogę zapisać przystosowanego firmware - + Custom image not found Własny obrazek nie odnaleziony - + No firmware selected Brak wyboru firmware - + Wrong radio calibration data in profile, Settings not patched Błędna kalibracja radia w profilu, Ustawienia nie spatchowane - + Wrong radio setting data in profile, Settings not patched Błędne ustawienia radia w profilu, Ustawienia nie spatchowane - - + + Cannot write file %1: %2. Nie mogę zapisać pliku %1: %2. - + Error writing file %1: %2. Błąd zapisu pliku %1: @@ -8501,118 +8494,118 @@ m2560 dla platformy V4 - + Invert Odwróć - - + + Load FW Otwórz firmware - - + + Load Pict Otwórz obrazek - + Load Profile Załaduj profil - - + + Save Zapisz - + Open Splash Library Otwórz bibliotekę obrazków - - - + + + ... - - Open - Otwórz - - - - - + + + Error Błąd - - Cannot load embedded FW image from %1. - Nie mogę załadować wstawionego obrazu FW z %1. - - - + Cannot load the image file %1. Nie mogę załadować pliku obrazka %1. - + Cannot load the profile image %1. Nie mogę załadować obrazu Profilu %1. - + Cannot load the library image %1. Nie mogę załadować obrazu biblioteki %1. - + File Saved Plik Zapisany - + The image was saved to the file %1 Obraz został zapisany do pliku %1 - + Image Refresh Error Błąd odświeżenia obrazka - + Failed to refresh image from file %1 Nieudane odswieżenie obrazka z pliku %1 - + File Save Error Błąd zapisu pliku - + Failed to write image to %1 Nieudany zapis obrazka do %1 - + Open Image to load Otwórz obrazek do załadowania - + + Open Firmware File + Otwórz plik Firmware + + + + Can not load embedded image from firmware file %1. + Nie mogę załądować wbudowanego obrazka z pliku Firmware %1. + + + Images (%1) Obrazki (%1) From d8f7bde3243a4d54a422aa3209492a364aac38e0 Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Sun, 23 Feb 2014 16:10:19 +0100 Subject: [PATCH 32/45] Fixed assert error --- companion/src/appdata.h | 2 +- companion/src/burndialog.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/companion/src/appdata.h b/companion/src/appdata.h index 7377bb4f0..fd037dd3b 100644 --- a/companion/src/appdata.h +++ b/companion/src/appdata.h @@ -287,7 +287,7 @@ class AppData: protected CompStoreObj int iconSize(); int historySize(); int jsCtrl(); - int modelEditTab(); + int modelEditTab(); // This variable is unused an can be removed int id(); int theme(); int warningId(); diff --git a/companion/src/burndialog.cpp b/companion/src/burndialog.cpp index bb1a32bf0..81c0ef3df 100644 --- a/companion/src/burndialog.cpp +++ b/companion/src/burndialog.cpp @@ -141,6 +141,8 @@ void burnDialog::on_FlashLoadButton_clicked() QTimer::singleShot(0, this, SLOT(shrink())); if (hexType==FLASH_FILE_TYPE) { fileName = QFileDialog::getOpenFileName(this, tr("Open Firmware File"), g.flashDir(), FLASH_FILES_FILTER); + if(fileName.isEmpty()) + return; checkFw(fileName); } else { From 6607dbd1b4ba39ec8d833010983821f8f36696d4 Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Sun, 23 Feb 2014 18:40:56 +0100 Subject: [PATCH 33/45] Both the latest downloaded firmware variant and file name are now consistently stored in the profile. This means that switching profile switches both at the same time. Previously the file name was global and the firmware variant was stored per profile. This made use of profiles confusing. --- companion/src/appdata.cpp | 43 +++++++------- companion/src/appdata.h | 15 +++-- companion/src/apppreferencesdialog.cpp | 11 ++-- companion/src/apppreferencesdialog.ui | 68 +++++++++++++++------- companion/src/burndialog.cpp | 75 ++++++++++++------------- companion/src/companion.cpp | 11 ++-- companion/src/customizesplashdialog.cpp | 2 +- companion/src/fwpreferencesdialog.cpp | 6 +- companion/src/generaledit.cpp | 2 +- companion/src/mainwindow.cpp | 22 ++++---- companion/src/mainwindow.h | 1 - companion/src/modeledit/telemetry.cpp | 2 +- 12 files changed, 142 insertions(+), 116 deletions(-) diff --git a/companion/src/appdata.cpp b/companion/src/appdata.cpp index 21145f978..ec634da4d 100644 --- a/companion/src/appdata.cpp +++ b/companion/src/appdata.cpp @@ -188,17 +188,17 @@ void CompStoreObj::getset( int &number, const QString tag, const int def, const } // ** FwRevision class******************** -int FwRevision::get( const QString fwName ) +int FwRevision::get( const QString fwType ) { QString result; - retrieve( result, fwName, "", "FwRevisions" ); + retrieve( result, fwType, "", "FwRevisions" ); return result.toInt(); } -void FwRevision::set( const QString fwName, const int fwRevision ) +void FwRevision::set( const QString fwType, const int fwRevision ) { QString tempString= QString("%1").arg(fwRevision); - store( tempString, tempString, fwName, "FwRevisions" ); + store( tempString, tempString, fwType, "FwRevisions" ); } void FwRevision::remove( const QString tag ) @@ -280,13 +280,13 @@ void JStickData::flush() // ** Profile class******************** // Get declarations -QString Profile::firmware() const { return _firmware; } +QString Profile::fwName() const { return _fwName; } +QString Profile::fwType() const { return _fwType; } QString Profile::name() const { return _name; } QString Profile::sdPath() const { return _sdPath; } QString Profile::splashFile() const { return _splashFile; } bool Profile::burnFirmware() const { return _burnFirmware; } bool Profile::renameFwFiles() const { return _renameFwFiles; } -bool Profile::patchImage() const { return _patchImage; } int Profile::channelOrder() const { return _channelOrder; } int Profile::defaultMode() const { return _defaultMode; } @@ -305,12 +305,12 @@ int Profile::vBatWarn() const { return _vBatWarn; } // Set declarations void Profile::name (const QString x) { store(x, _name, "Name" ,"Profiles", QString("profile%1").arg(index));} -void Profile::firmware (const QString x) { store(x, _firmware, "firmware" ,"Profiles", QString("profile%1").arg(index));} +void Profile::fwName (const QString x) { store(x, _fwName, "fwName" ,"Profiles", QString("profile%1").arg(index));} +void Profile::fwType (const QString x) { store(x, _fwType, "fwType" ,"Profiles", QString("profile%1").arg(index));} void Profile::sdPath (const QString x) { store(x, _sdPath, "sdPath" ,"Profiles", QString("profile%1").arg(index));} void Profile::splashFile (const QString x) { store(x, _splashFile, "SplashFileName" ,"Profiles", QString("profile%1").arg(index));} void Profile::burnFirmware (const bool x) { store(x, _burnFirmware, "burnFirmware" ,"Profiles", QString("profile%1").arg(index));} void Profile::renameFwFiles (const bool x) { store(x, _renameFwFiles, "rename_firmware_files" ,"Profiles", QString("profile%1").arg(index));} -void Profile::patchImage (const bool x) { store(x, _patchImage, "patchImage" ,"Profiles", QString("profile%1").arg(index));} void Profile::channelOrder (const int x) { store(x, _channelOrder, "default_channel_order" ,"Profiles", QString("profile%1").arg(index));} void Profile::defaultMode (const int x) { store(x, _defaultMode, "default_mode" ,"Profiles", QString("profile%1").arg(index));} @@ -337,12 +337,12 @@ Profile::Profile() Profile& Profile::operator=(const Profile& rhs) { name ( rhs.name() ); - firmware ( rhs.firmware() ); + fwName ( rhs.fwName() ); + fwType ( rhs.fwType() ); sdPath ( rhs.sdPath() ); splashFile ( rhs.splashFile() ); burnFirmware ( rhs.burnFirmware() ); renameFwFiles( rhs.renameFwFiles() ); - patchImage ( rhs.patchImage() ); channelOrder ( rhs.channelOrder() ); defaultMode ( rhs.defaultMode() ); beeper ( rhs.beeper() ); @@ -389,13 +389,13 @@ void Profile::init(int newIndex) { index = newIndex; - _firmware = ""; + _fwName = ""; + _fwType = ""; _name = ""; _sdPath = ""; _splashFile = ""; _burnFirmware = false; _renameFwFiles = false; - _patchImage = false; _channelOrder = 0; _defaultMode = 1; @@ -423,13 +423,13 @@ void Profile::init(int newIndex) void Profile::flush() { // Load and store all variables. Use default values if setting values are missing - getset( _firmware, "firmware" ,"" ,"Profiles", QString("profile%1").arg(index)); + getset( _fwName, "fwName" ,"" ,"Profiles", QString("profile%1").arg(index)); + getset( _fwType, "fwType" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _name, "Name" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _sdPath, "sdPath" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _splashFile, "SplashFileName" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _burnFirmware, "burnFirmware" ,false ,"Profiles", QString("profile%1").arg(index)); getset( _renameFwFiles, "rename_firmware_files" ,false ,"Profiles", QString("profile%1").arg(index)); - getset( _patchImage, "patchImage" ,false ,"Profiles", QString("profile%1").arg(index)); getset( _channelOrder, "default_channel_order" ,0 ,"Profiles", QString("profile%1").arg(index)); getset( _defaultMode, "default_mode" ,1 ,"Profiles", QString("profile%1").arg(index)); @@ -464,7 +464,6 @@ QString AppData::compileServer() { return _compileServer; } QString AppData::cpuId() { return _cpuId; } QString AppData::dfuArguments() { return _dfuArguments; } QString AppData::dfuLocation() { return _dfuLocation; } -QString AppData::lastFw() { return _lastFw; } QString AppData::locale() { return _locale; } QString AppData::mcu() { return _mcu; } QString AppData::programmer() { return _programmer; } @@ -519,7 +518,6 @@ void AppData::compileServer (const QString x) { store(x, _compileServer, void AppData::cpuId (const QString x) { store(x, _cpuId, "cpu_id" );} void AppData::dfuArguments (const QString x) { store(x, _dfuArguments, "dfu_arguments" );} void AppData::dfuLocation (const QString x) { store(x, _dfuLocation, "dfu_location" );} -void AppData::lastFw (const QString x) { store(x, _lastFw, "lastFw" );} void AppData::locale (const QString x) { store(x, _locale, "locale" );} void AppData::mcu (const QString x) { store(x, _mcu, "mcu" );} void AppData::programmer (const QString x) { store(x, _programmer, "programmer" );} @@ -586,11 +584,11 @@ AppData::AppData() // Store old values in new locations autoCheckApp(settings.value("startup_check_companion9x", true).toBool()); - // Convert and store the firmware name - QString firmware = settings.value("firmware", "").toString(); - firmware.replace("open9x","opentx"); - firmware.replace("x9da","taranis"); - profile[0].firmware( firmware ); + // Convert and store the firmware type + QString fwType = settings.value("firmware", "").toString(); + fwType.replace("open9x","opentx"); + fwType.replace("x9da","taranis"); + profile[0].fwType( fwType ); // Move the Companion9x profile settings to profile0, the new default profile profile[0].name( settings.value( "Name", "" ).toString()); @@ -598,7 +596,6 @@ AppData::AppData() profile[0].splashFile( settings.value( "SplashFileName", "" ).toString()); profile[0].burnFirmware( settings.value( "burnFirmware", false ).toBool()); profile[0].renameFwFiles( settings.value( "rename_firmware_files", false ).toBool()); - profile[0].patchImage( settings.value( "patchImage", false ).toBool()); profile[0].channelOrder( settings.value( "default_channel_order", "0" ).toInt()); profile[0].defaultMode( settings.value( "default_mode", "1" ).toInt()); @@ -613,6 +610,7 @@ AppData::AppData() settings.remove("default_channel_order"); settings.remove("default_mode"); settings.remove("firmware"); + settings.remove("lastFw"); settings.remove("Name"); settings.remove("patchImage"); settings.remove("rename_firmware_files"); @@ -638,7 +636,6 @@ AppData::AppData() getset( _cpuId, "cpu_id" ,"" ); getset( _dfuArguments, "dfu_arguments" ,"-a 0" ); getset( _dfuLocation, "dfu_location" ,"" ); - getset( _lastFw, "lastFw" ,"" ); getset( _locale, "locale" ,"" ); getset( _mcu, "mcu" ,"m64" ); getset( _programmer, "programmer" ,"usbasp" ); diff --git a/companion/src/appdata.h b/companion/src/appdata.h index fd037dd3b..479229221 100644 --- a/companion/src/appdata.h +++ b/companion/src/appdata.h @@ -92,13 +92,13 @@ class Profile: protected CompStoreObj int index; // Application Variables - QString _firmware; + QString _fwName; + QString _fwType; QString _name; QString _sdPath; QString _splashFile; bool _burnFirmware; bool _renameFwFiles; - bool _patchImage; int _channelOrder; int _defaultMode; @@ -118,13 +118,13 @@ class Profile: protected CompStoreObj public: // All the get definitions - QString firmware() const; + QString fwName() const; + QString fwType() const; QString name() const; QString sdPath() const; QString splashFile() const; bool burnFirmware() const; bool renameFwFiles() const; - bool patchImage() const; //TODO This variable is unused and should be removed int channelOrder() const; int defaultMode() const; @@ -143,12 +143,12 @@ class Profile: protected CompStoreObj // All the set definitions void name (const QString); - void firmware (const QString); + void fwName (const QString); + void fwType (const QString); void sdPath (const QString); void splashFile (const QString); void burnFirmware (const bool); void renameFwFiles (const bool); - void patchImage (const bool); void channelOrder (const int); void defaultMode (const int); @@ -195,7 +195,6 @@ class AppData: protected CompStoreObj QString _cpuId; QString _dfuArguments; QString _dfuLocation; - QString _lastFw; QString _locale; QString _mcu; QString _programmer; @@ -251,7 +250,7 @@ class AppData: protected CompStoreObj QString cpuId(); QString dfuArguments(); QString dfuLocation(); - QString lastFw(); + QString lastFw(); QString locale(); QString mcu(); QString programmer(); diff --git a/companion/src/apppreferencesdialog.cpp b/companion/src/apppreferencesdialog.cpp index 5215fda5e..c416ff3db 100644 --- a/companion/src/apppreferencesdialog.cpp +++ b/companion/src/apppreferencesdialog.cpp @@ -63,7 +63,8 @@ void appPreferencesDialog::writeValues() g.profile[g.id()].name(ui->profileNameLE->text()); g.profile[g.id()].sdPath(ui->sdPath->text()); g.profile[g.id()].splashFile(ui->SplashFileName->text()); - g.profile[g.id()].firmware(ui->firmwareLE->text()); + g.profile[g.id()].fwName(ui->fwNameLE->text()); + g.profile[g.id()].fwType(ui->fwTypeLE->text()); saveProfile(); } @@ -145,7 +146,8 @@ void appPreferencesDialog::initSettings() ui->renameFirmware->setChecked(g.profile[g.id()].renameFwFiles()); ui->sdPath->setText(g.profile[g.id()].sdPath()); ui->profileNameLE->setText(g.profile[g.id()].name()); - ui->firmwareLE->setText(g.profile[g.id()].firmware()); + ui->fwNameLE->setText(g.profile[g.id()].fwName()); + ui->fwTypeLE->setText(g.profile[g.id()].fwType()); ui->SplashFileName->setText(g.profile[g.id()].splashFile()); displayImage( g.profile[g.id()].splashFile() ); @@ -248,7 +250,8 @@ void appPreferencesDialog::saveProfile() g.profile[g.id()].renameFwFiles( ui->renameFirmware->isChecked()); g.profile[g.id()].sdPath( ui->sdPath->text()); g.profile[g.id()].splashFile( ui->SplashFileName->text()); - g.profile[g.id()].firmware( ui->firmwareLE->text()); + g.profile[g.id()].fwName( ui->fwNameLE->text()); + g.profile[g.id()].fwType( ui->fwTypeLE->text()); } void appPreferencesDialog::on_removeProfileButton_clicked() @@ -274,7 +277,7 @@ bool appPreferencesDialog::displayImage( QString fileName ) // Use the firmware name to determine splash width int width = SPLASH_WIDTH; - if (g.profile[g.id()].firmware().contains("taranis")) + if (g.profile[g.id()].fwType().contains("taranis")) width = SPLASHX9D_WIDTH; ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(width, SPLASH_HEIGHT))); diff --git a/companion/src/apppreferencesdialog.ui b/companion/src/apppreferencesdialog.ui index 98824f3b5..f6ace593c 100644 --- a/companion/src/apppreferencesdialog.ui +++ b/companion/src/apppreferencesdialog.ui @@ -502,7 +502,7 @@ Radio Settings Profile - + @@ -556,7 +556,7 @@ Mode 4: - + @@ -706,7 +706,7 @@ This is used by the templated to determine which channel goes to what number out - + @@ -726,7 +726,7 @@ This is used by the templated to determine which channel goes to what number out - + Qt::Vertical @@ -739,7 +739,7 @@ This is used by the templated to determine which channel goes to what number out - + @@ -752,7 +752,7 @@ This is used by the templated to determine which channel goes to what number out - + @@ -768,14 +768,14 @@ This is used by the templated to determine which channel goes to what number out - + Append version number to FW file name - + @@ -791,7 +791,7 @@ This is used by the templated to determine which channel goes to what number out - + true @@ -813,7 +813,7 @@ This is used by the templated to determine which channel goes to what number out - + Qt::Horizontal @@ -826,35 +826,35 @@ This is used by the templated to determine which channel goes to what number out - + Offer to write FW to Tx after download - + Remove Profile - + Open Folder - + Qt::Horizontal - + true @@ -879,12 +879,12 @@ This is used by the templated to determine which channel goes to what number out - Firmware + Firmware Variant - + false @@ -902,14 +902,14 @@ This is used by the templated to determine which channel goes to what number out - + Select Image - + Clear Image @@ -932,7 +932,7 @@ This is used by the templated to determine which channel goes to what number out - + @@ -966,13 +966,39 @@ This is used by the templated to determine which channel goes to what number out - + Qt::Horizontal + + + + Firmware File + + + + + + + false + + + + 350 + 0 + + + + + 350 + 16777215 + + + + diff --git a/companion/src/burndialog.cpp b/companion/src/burndialog.cpp index 81c0ef3df..dfc9d62b4 100644 --- a/companion/src/burndialog.cpp +++ b/companion/src/burndialog.cpp @@ -109,8 +109,7 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac hexfileName->clear(); } else if (Type==FLASH_FILE_TYPE) { - QString FileName; - FileName = g.lastFw(); + QString FileName = g.profile[g.id()].fwName(); QFile file(FileName); if (file.exists()) { checkFw(FileName); @@ -353,31 +352,32 @@ void burnDialog::on_useFwImageCB_clicked() FlashInterface flash(fileName); if (!flash.isValid()) { QMessageBox::critical(this, tr("Error"), tr( "The firmware file is not valid." )); - return; } - if (!flash.hasSplash()) { - QMessageBox::critical(this, tr("Error"), tr( "There is no start screen image in the firmware file." )); - return; + else { + if (!flash.hasSplash()) { + QMessageBox::critical(this, tr("Error"), tr( "There is no start screen image in the firmware file." )); + } + else{ + imageSource = FIRMWARE; + imageFile = fileName; + } } - imageSource = FIRMWARE; - imageFile = fileName; updateUI(); } void burnDialog::on_useProfileImageCB_clicked() { QString fileName = g.profile[g.id()].splashFile(); - if (fileName.isEmpty()){ - QMessageBox::critical(this, tr("Error"), tr( "The radio profile has no defined start screen." )); - return; + if (!fileName.isEmpty()){ + QImage image(fileName); + if (image.isNull()) { + QMessageBox::critical(this, tr("Error"), tr("The profile image %1 does not contain an image.").arg(fileName)); + } + else { + imageSource = PROFILE; + imageFile = fileName; + } } - QImage image(fileName); - if (image.isNull()) { - QMessageBox::critical(this, tr("Error"), tr("The profile image %1 does not seem to contain an image.").arg(fileName)); - return; - } - imageSource = PROFILE; - imageFile = fileName; updateUI(); } @@ -388,17 +388,17 @@ void burnDialog::on_useAnotherImageCB_clicked() supportedImageFormats += QLatin1String(" *.") + QImageReader::supportedImageFormats()[formatIndex]; } QString fileName = QFileDialog::getOpenFileName(this, tr("Open image file to use as Tx start screen"), g.imagesDir(), tr("Images (%1)").arg(supportedImageFormats)); - if (fileName.isEmpty()){ - return; + if (!fileName.isEmpty()){ + g.imagesDir( QFileInfo(fileName).dir().absolutePath() ); + QImage image(fileName); + if (image.isNull()) { + QMessageBox::critical(this, tr("Error"), tr("Image could not be loaded from %1").arg(fileName)); + } + else{ + imageSource = ANOTHER; + imageFile = fileName; + } } - g.imagesDir( QFileInfo(fileName).dir().absolutePath() ); - QImage image(fileName); - if (image.isNull()) { - QMessageBox::critical(this, tr("Error"), tr("Image could not be loaded from %1").arg(fileName)); - return; - } - imageSource = ANOTHER; - imageFile = fileName; updateUI(); } @@ -407,16 +407,16 @@ void burnDialog::on_useLibraryImageCB_clicked() QString fileName; splashLibrary *ld = new splashLibrary(this,&fileName); ld->exec(); - if (fileName.isEmpty()) { - return; + if (!fileName.isEmpty()) { + QImage image(fileName); + if (image.isNull()) { + QMessageBox::critical(this, tr("Error"), tr("The library image could not be loaded")); + } + else{ + imageSource = LIBRARY; + imageFile = fileName; + } } - QImage image(fileName); - if (image.isNull()) { - QMessageBox::critical(this, tr("Error"), tr("The library image could not be loaded")); - return; - } - imageSource = LIBRARY; - imageFile = fileName; updateUI(); } @@ -426,7 +426,6 @@ void burnDialog::on_BurnFlashButton_clicked() QString fileName=ui->FWFileName->text(); if (!fileName.isEmpty()) { g.flashDir( QFileInfo(fileName).dir().absolutePath() ); - g.lastFw( fileName ); if (!ui->useFwImageCB->isChecked()) { QImage image = ui->imageLabel->pixmap()->toImage().scaled(ui->imageLabel->width(), ui->imageLabel->height()); if (!image.isNull()) { diff --git a/companion/src/companion.cpp b/companion/src/companion.cpp index 96a6d5597..37a988273 100644 --- a/companion/src/companion.cpp +++ b/companion/src/companion.cpp @@ -95,15 +95,18 @@ int main(int argc, char *argv[]) QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); - if (g.profile[g.id()].firmware().isEmpty()) - g.profile[g.id()].firmware(default_firmware_variant.id); + if (g.profile[g.id()].fwType().isEmpty()){ + g.profile[g.id()].fwType(default_firmware_variant.id); + g.profile[g.id()].fwName(""); + } + - QPixmap pixmap = QPixmap(g.profile[g.id()].firmware().contains("taranis") ? ":/images/splasht.png" : ":/images/splash.png"); + QPixmap pixmap = QPixmap(g.profile[g.id()].fwType().contains("taranis") ? ":/images/splasht.png" : ":/images/splash.png"); QSplashScreen *splash = new QSplashScreen(pixmap); RegisterFirmwares(); - current_firmware_variant = GetFirmwareVariant(g.profile[g.id()].firmware()); + current_firmware_variant = GetFirmwareVariant(g.profile[g.id()].fwType()); MainWindow *mainWin = new MainWindow(); if (g.showSplash()) { diff --git a/companion/src/customizesplashdialog.cpp b/companion/src/customizesplashdialog.cpp index 1be93d4a5..09c55aec3 100644 --- a/companion/src/customizesplashdialog.cpp +++ b/companion/src/customizesplashdialog.cpp @@ -56,7 +56,7 @@ bool Side::displayImage( QString fileName, Source pictSource ) if (pictSource== PICT) *format = image.width()>WIDTH_9X ? LCDTARANIS : LCD9X; else if (pictSource == PROFILE) - *format = (g.profile[g.id()].firmware().contains("taranis")) ? LCDTARANIS : LCD9X; + *format = (g.profile[g.id()].fwType().contains("taranis")) ? LCDTARANIS : LCD9X; } if (image.isNull()) { return false; diff --git a/companion/src/fwpreferencesdialog.cpp b/companion/src/fwpreferencesdialog.cpp index 17c7c6caf..ec2585ddc 100644 --- a/companion/src/fwpreferencesdialog.cpp +++ b/companion/src/fwpreferencesdialog.cpp @@ -213,7 +213,7 @@ void fwPreferencesDialog::writeValues() { g.cpuId( ui->CPU_ID_LE->text() ); current_firmware_variant = getFirmwareVariant(); - g.profile[g.id()].firmware( current_firmware_variant.id ); + g.profile[g.id()].fwType( current_firmware_variant.id ); } void fwPreferencesDialog::populateFirmwareOptions(const FirmwareInfo * firmware) @@ -290,7 +290,7 @@ void fwPreferencesDialog::on_checkFWUpdates_clicked() FirmwareVariant variant = getFirmwareVariant(); if (g.profile[g.id()].burnFirmware()) { current_firmware_variant = variant; - g.profile[g.id()].firmware( variant.id ); + g.profile[g.id()].fwType( variant.id ); } MainWindow * mw = (MainWindow *)this->parent(); mw->checkForUpdates(true, variant.id); @@ -305,7 +305,7 @@ void fwPreferencesDialog::on_fw_dnld_clicked() if (!variant.firmware->getUrl(variant.id).isNull()) { if (g.profile[g.id()].burnFirmware()) { current_firmware_variant = getFirmwareVariant(); - g.profile[g.id()].firmware( current_firmware_variant.id ); + g.profile[g.id()].fwType( current_firmware_variant.id ); } mw->downloadLatestFW(current_firmware_variant.firmware, current_firmware_variant.id); } diff --git a/companion/src/generaledit.cpp b/companion/src/generaledit.cpp index 6e96e0368..6c5b6dfc9 100644 --- a/companion/src/generaledit.cpp +++ b/companion/src/generaledit.cpp @@ -20,7 +20,7 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) : ui->setupUi(this); this->setWindowIcon(CompanionIcon("open.png")); - QString firmware_id = g.profile[g.id()].firmware(); + QString firmware_id = g.profile[g.id()].fwType(); ui->tabWidget->setCurrentIndex( g.generalEditTab() ); QString name=g.profile[g.id()].name(); if (name.isEmpty()) { diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index e4bb27f80..596f6b78c 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -308,7 +308,7 @@ void MainWindow::downloadLatestFW(FirmwareInfo * firmware, const QString & firmw if (!fileName.isEmpty()) { downloadedFW = firmwareId; needRename=true; - downloadedFWFilename = fileName; + g.profile[g.id()].fwName( fileName ); if (!cpuid.isEmpty()) { url.append("&cpuid="); url.append(cpuid); @@ -323,7 +323,7 @@ void MainWindow::downloadLatestFW(FirmwareInfo * firmware, const QString & firmw void MainWindow::reply1Accepted() { QString errormsg; - if (downloadedFWFilename.isEmpty()) { + if (g.profile[g.id()].fwName().isEmpty()) { if (!(downloadedFW.isEmpty())) { QFile file(downloadedFW); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { //reading HEX TEXT file @@ -364,11 +364,11 @@ void MainWindow::reply1Accepted() g.fwRev.set(downloadedFW, currentFWrev); } } else { - QFile file(downloadedFWFilename); + QFile file(g.profile[g.id()].fwName()); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { //reading HEX TEXT file QMessageBox::critical(this, tr("Error"), tr("Error opening file %1:\n%2.") - .arg(downloadedFWFilename) + .arg(g.profile[g.id()].fwName()) .arg(file.errorString())); return; } @@ -399,13 +399,13 @@ void MainWindow::reply1Accepted() return; } file.close(); - FlashInterface flash(downloadedFWFilename); + FlashInterface flash(g.profile[g.id()].fwName()); QString rev=flash.getSvn(); int pos=rev.lastIndexOf("-r"); if (pos>0) { currentFWrev=rev.mid(pos+2).toInt(); if (g.profile[g.id()].renameFwFiles() && needRename) { - QFileInfo fi(downloadedFWFilename); + QFileInfo fi(g.profile[g.id()].fwName()); QString path=fi.path()+QDir::separator (); path.append(fi.completeBaseName()); path.append(rev.mid(pos)); @@ -413,14 +413,14 @@ void MainWindow::reply1Accepted() path.append(fi.suffix()); QDir qd; qd.remove(path); - qd.rename(downloadedFWFilename,path); - downloadedFWFilename=path; + qd.rename(g.profile[g.id()].fwName(),path); + g.profile[g.id()].fwName(path); } g.fwRev.set(downloadedFW, currentFWrev); if (g.profile[g.id()].burnFirmware()) { int ret = QMessageBox::question(this, "Companion", tr("Do you want to write the firmware to the transmitter now ?"), QMessageBox::Yes | QMessageBox::No); if (ret == QMessageBox::Yes) { - writeFlash(downloadedFWFilename); + writeFlash(g.profile[g.id()].fwName()); } } } @@ -560,7 +560,7 @@ void MainWindow::reply1Finished(QNetworkReply * reply) url.append("&cpuid="); url.append(cpuid); } - downloadedFWFilename = fileName; + g.profile[g.id()].fwName( fileName ); g.flashDir(QFileInfo(fileName).dir().absolutePath()); downloadDialog * dd = new downloadDialog(this, url, fileName); currentFWrev_temp = NewFwRev; @@ -702,7 +702,7 @@ void MainWindow::loadProfile() //TODO Load all variables - Also HW! g.id( profnum ); // TODO Get rid of this global variable - The profile.firmware is the real source - current_firmware_variant = GetFirmwareVariant(g.profile[g.id()].firmware()); + current_firmware_variant = GetFirmwareVariant(g.profile[g.id()].fwType()); foreach (QMdiSubWindow *window, mdiArea->subWindowList()) { MdiChild *mdiChild = qobject_cast(window->widget()); diff --git a/companion/src/mainwindow.h b/companion/src/mainwindow.h index f746b1eb8..8bfca1fa8 100644 --- a/companion/src/mainwindow.h +++ b/companion/src/mainwindow.h @@ -197,7 +197,6 @@ private: QString installer_fileName; QString downloadedFW; - QString downloadedFWFilename; downloadDialog * downloadDialog_forWait; bool needRename; diff --git a/companion/src/modeledit/telemetry.cpp b/companion/src/modeledit/telemetry.cpp index 099ba56ab..e06fe96a3 100644 --- a/companion/src/modeledit/telemetry.cpp +++ b/companion/src/modeledit/telemetry.cpp @@ -457,7 +457,7 @@ TelemetryPanel::~TelemetryPanel() void TelemetryPanel::setup() { - QString firmware_id = g.profile[g.id()].firmware(); + QString firmware_id = g.profile[g.id()].fwType(); lock=true; From d4db0f1f95d9ab26cf4ceeb96de5c82ee465f6cf Mon Sep 17 00:00:00 2001 From: openfsguruh Date: Sun, 23 Feb 2014 20:34:16 +0100 Subject: [PATCH 34/45] typo in comment, no real change --- radio/src/targets/taranis/trainer_driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/targets/taranis/trainer_driver.cpp b/radio/src/targets/taranis/trainer_driver.cpp index 9319cc18b..f4b4e548c 100644 --- a/radio/src/targets/taranis/trainer_driver.cpp +++ b/radio/src/targets/taranis/trainer_driver.cpp @@ -124,7 +124,7 @@ extern "C" void TIM3_IRQHandler() val = (uint16_t)(capture - lastCapt) / 2 ; lastCapt = capture; - // We prcoess g_ppmInsright here to make servo movement as smooth as possible + // We process g_ppmInsright here to make servo movement as smooth as possible // while under trainee control if ((val>4000) && (val < 19000)) { // G: Prioritize reset pulse. (Needed when less than 8 incoming pulses) ppmInState = 1; // triggered From c28968910510e19d5ad05c231ce4ea406a85c047 Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Sun, 23 Feb 2014 22:24:43 +0100 Subject: [PATCH 35/45] All splash imgage display dialogs now use common code. The splash image library displayed all images in 128x64 mono format. Changed this to display either in 128x64 mono or 212x64 gray scale depending on profile information. --- companion/src/apppreferencesdialog.cpp | 26 +-- companion/src/apppreferencesdialog.ui | 5 +- companion/src/burndialog.cpp | 21 +- companion/src/burndialog.ui | 13 +- companion/src/customizesplashdialog.cpp | 68 +++--- companion/src/helpers.cpp | 22 ++ companion/src/helpers.h | 2 + companion/src/splashlibrary.cpp | 8 +- companion/src/splashlibrary.h | 1 - companion/src/splashlibrary.ui | 297 +++++++++++------------- 10 files changed, 201 insertions(+), 262 deletions(-) diff --git a/companion/src/apppreferencesdialog.cpp b/companion/src/apppreferencesdialog.cpp index c416ff3db..96f5268c3 100644 --- a/companion/src/apppreferencesdialog.cpp +++ b/companion/src/apppreferencesdialog.cpp @@ -279,29 +279,9 @@ bool appPreferencesDialog::displayImage( QString fileName ) int width = SPLASH_WIDTH; if (g.profile[g.id()].fwType().contains("taranis")) width = SPLASHX9D_WIDTH; - - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(width, SPLASH_HEIGHT))); - if (width==SPLASHX9D_WIDTH) { - image=image.convertToFormat(QImage::Format_RGB32); - QRgb col; - int gray, height = image.height(); - for (int i = 0; i < width; ++i) { - for (int j = 0; j < height; ++j) { - col = image.pixel(i, j); - gray = qGray(col); - image.setPixel(i, j, qRgb(gray, gray, gray)); - } - } - ui->imageLabel->setPixmap(QPixmap::fromImage(image)); - } - else { - ui->imageLabel->setPixmap(QPixmap::fromImage(image.convertToFormat(QImage::Format_Mono))); - } - if (width == SPLASH_WIDTH) - ui->imageLabel->setFixedSize(SPLASH_WIDTH, SPLASH_HEIGHT); - else - ui->imageLabel->setFixedSize(SPLASHX9D_WIDTH, SPLASHX9D_HEIGHT); - + + ui->imageLabel->setPixmap( makePixMap( image, g.profile[g.id()].fwType())); + ui->imageLabel->setFixedSize(width, SPLASH_HEIGHT); return true; } diff --git a/companion/src/apppreferencesdialog.ui b/companion/src/apppreferencesdialog.ui index f6ace593c..bdaaff9d4 100644 --- a/companion/src/apppreferencesdialog.ui +++ b/companion/src/apppreferencesdialog.ui @@ -956,7 +956,10 @@ This is used by the templated to determine which channel goes to what number out QFrame::Panel - QFrame::Raised + QFrame::Plain + + + 1 diff --git a/companion/src/burndialog.cpp b/companion/src/burndialog.cpp index dfc9d62b4..617c7ea9e 100644 --- a/companion/src/burndialog.cpp +++ b/companion/src/burndialog.cpp @@ -311,26 +311,7 @@ void burnDialog::displaySplash() if (image.isNull()) { return; } - if (ui->imageLabel->width()!=128) { - image=image.convertToFormat(QImage::Format_RGB32); - QRgb col; - int gray; - int width = image.width(); - int height = image.height(); - for (int i = 0; i < width; ++i) - { - for (int j = 0; j < height; ++j) - { - col = image.pixel(i, j); - gray = qGray(col); - image.setPixel(i, j, qRgb(gray, gray, gray)); - } - } - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()))); - } - else { - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()).convertToFormat(QImage::Format_Mono))); - } + ui->imageLabel->setPixmap( makePixMap( image, g.profile[g.id()].fwType())); } void burnDialog::updateUI() diff --git a/companion/src/burndialog.ui b/companion/src/burndialog.ui index 89107b672..772304390 100644 --- a/companion/src/burndialog.ui +++ b/companion/src/burndialog.ui @@ -279,7 +279,7 @@ QFrame::Panel - QFrame::Raised + QFrame::Plain @@ -374,12 +374,21 @@ + BurnFlashButton FWFileName FlashLoadButton + DateField + SVNField + ModField + useProfileImageCB + useFwImageCB + useLibraryImageCB + useAnotherImageCB EEbackupCB + patchcalib_CB + patchhw_CB EEpromCB cancelButton - BurnFlashButton diff --git a/companion/src/customizesplashdialog.cpp b/companion/src/customizesplashdialog.cpp index 09c55aec3..42bf463da 100644 --- a/companion/src/customizesplashdialog.cpp +++ b/companion/src/customizesplashdialog.cpp @@ -41,7 +41,7 @@ bool Side::displayImage( QString fileName, Source pictSource ) if (fileName.isEmpty()) return false; - + // Determine which picture format to use if (pictSource == FW ){ FlashInterface flash(fileName); @@ -49,7 +49,7 @@ bool Side::displayImage( QString fileName, Source pictSource ) return false; else image = flash.getSplash(); - *format = (flash.getSplashWidth()==WIDTH_TARANIS ? LCDTARANIS : LCD9X); + *format = (flash.getSplashWidth()==WIDTH_TARANIS ? LCDTARANIS : LCD9X); } else { image.load(fileName); @@ -61,48 +61,34 @@ bool Side::displayImage( QString fileName, Source pictSource ) if (image.isNull()) { return false; } - // Prepare and display image + // Load image if (*format==LCDTARANIS) { - image=image.convertToFormat(QImage::Format_RGB32); - QRgb col; - int gray; - int width = image.width(); - int height = image.height(); - for (int i = 0; i < width; ++i) { - for (int j = 0; j < height; ++j) { - col = image.pixel(i, j); - gray = qGray(col); - image.setPixel(i, j, qRgb(gray, gray, gray)); - } - } - imageLabel->setPixmap(QPixmap::fromImage(image.scaled(imageLabel->width()/2, imageLabel->height()/2))); + imageLabel->setPixmap( makePixMap( image, "taranis" )); + imageLabel->setFixedSize(WIDTH_TARANIS*2, HEIGHT_TARANIS*2); } - else - imageLabel->setPixmap(QPixmap::fromImage(image.scaled(imageLabel->width()/2, imageLabel->height()/2).convertToFormat(QImage::Format_Mono))); - - if (*format == LCD9X) - imageLabel->setFixedSize(WIDTH_9X*2, HEIGHT_9X*2); - else - imageLabel->setFixedSize(WIDTH_TARANIS*2, HEIGHT_TARANIS*2); - + else { + imageLabel->setPixmap( makePixMap( image, "9x" )); + imageLabel->setFixedSize(WIDTH_9X*2, HEIGHT_9X*2); + } + switch (pictSource){ - case FW: - fileNameEdit->setText(QObject::tr("FW: %1").arg(fileName)); - *saveToFileName = fileName; - *source=FW; - break; - case PICT: - fileNameEdit->setText(QObject::tr("Pict: %1").arg(fileName)); - *saveToFileName = fileName; - *source=PICT; - break; - case PROFILE: - fileNameEdit->setText(QObject::tr("Profile image")); - *saveToFileName = fileName; - *source=PROFILE; - break; - default: - break; + case FW: + fileNameEdit->setText(QObject::tr("FW: %1").arg(fileName)); + *saveToFileName = fileName; + *source=FW; + break; + case PICT: + fileNameEdit->setText(QObject::tr("Pict: %1").arg(fileName)); + *saveToFileName = fileName; + *source=PICT; + break; + case PROFILE: + fileNameEdit->setText(QObject::tr("Profile image")); + *saveToFileName = fileName; + *source=PROFILE; + break; + default: + break; } saveButton->setEnabled(true); libraryButton->setEnabled(true); diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp index 99dec9a63..2c7f9fc0c 100644 --- a/companion/src/helpers.cpp +++ b/companion/src/helpers.cpp @@ -2,6 +2,7 @@ #include "appdata.h" #include "helpers.h" #include "simulatordialog.h" +#include "flashinterface.h" QString getPhaseName(int val, char * phasename) { @@ -946,3 +947,24 @@ void startSimulation(QWidget * parent, RadioData & radioData, int modelIdx) QObject::tr("Simulator for this firmware is not yet available")); } } + +QPixmap makePixMap( QImage image, QString firmwareType ) +{ + if (firmwareType.contains( "taranis" )) { + image = image.convertToFormat(QImage::Format_RGB32); + QRgb col; + int gray; + for (int i = 0; i < image.width(); ++i) { + for (int j = 0; j < image.height(); ++j) { + col = image.pixel(i, j); + gray = qGray(col); + image.setPixel(i, j, qRgb(gray, gray, gray)); + } + } + image = image.scaled(SPLASHX9D_WIDTH, SPLASHX9D_HEIGHT); + } + else { + image = image.scaled(SPLASH_WIDTH, SPLASH_HEIGHT).convertToFormat(QImage::Format_Mono); + } + return(QPixmap::fromImage(image)); +} diff --git a/companion/src/helpers.h b/companion/src/helpers.h index fdebcb170..5d667e5d8 100644 --- a/companion/src/helpers.h +++ b/companion/src/helpers.h @@ -128,4 +128,6 @@ QString getFrSkySrc(int index); void startSimulation(QWidget * parent, RadioData & radioData, int modelIdx); +QPixmap makePixMap( QImage image, QString firmwareType ); + #endif // HELPERS_H diff --git a/companion/src/splashlibrary.cpp b/companion/src/splashlibrary.cpp index 5685406b7..d35dd48a6 100644 --- a/companion/src/splashlibrary.cpp +++ b/companion/src/splashlibrary.cpp @@ -3,7 +3,6 @@ #include "appdata.h" #include #include "helpers.h" -//#include "splashlabel.h" #include "flashinterface.h" #include "helpers.h" @@ -23,7 +22,6 @@ splashLibrary::splashLibrary(QWidget *parent, QString * fileName) : QDialog(pare foreach(splashLabel *sl, findChildren()) { connect(sl, SIGNAL(buttonPressed(int)), this, SLOT(onButtonPressed(int))); } - resize(0, 0); } splashLibrary::~splashLibrary() { @@ -40,7 +38,7 @@ void splashLibrary::setupPage(int page) { if ((i + 20 * page) < imageList.size()) { QImage image(imageList.at(i + 20 * page)); if (!image.isNull()) { - sl[i]->setPixmap(QPixmap::fromImage(image.scaled(SPLASH_WIDTH, SPLASH_HEIGHT).convertToFormat(QImage::Format_Mono))); + sl[i]->setPixmap(makePixMap(image, g.profile[g.id()].fwType())); sl[i]->setEnabled(true); sl[i]->setId((i + 20 * page)); sl[i]->setStyleSheet("border:1px solid; border-color:#999999;"); @@ -104,10 +102,6 @@ void splashLibrary::getFileList() { } } -void splashLibrary::shrink() { - resize(0, 0); -} - void splashLibrary::dclose() { close(); } diff --git a/companion/src/splashlibrary.h b/companion/src/splashlibrary.h index 9da9d58e4..0d9123a74 100644 --- a/companion/src/splashlibrary.h +++ b/companion/src/splashlibrary.h @@ -17,7 +17,6 @@ public: ~splashLibrary(); private slots: - void shrink() ; void dclose(); void onButtonPressed(int button); void on_nextPage_clicked(); diff --git a/companion/src/splashlibrary.ui b/companion/src/splashlibrary.ui index 15e1b54a0..5ce1e2502 100644 --- a/companion/src/splashlibrary.ui +++ b/companion/src/splashlibrary.ui @@ -6,22 +6,16 @@ 0 0 - 662 - 356 + 650 + 374 - + 0 0 - - - 662 - 356 - - @@ -39,10 +33,16 @@ - 50 + 34 0 + + + 34 + 16777215 + + ... @@ -54,12 +54,15 @@ - + + + QLayout::SetNoConstraint + - + 0 0 @@ -72,7 +75,7 @@ - 130 + 214 66 @@ -105,7 +108,7 @@ - + 0 0 @@ -113,55 +116,12 @@ 130 - 66 + 0 - 130 - 66 - - - - true - - - border:1px; - - - QFrame::Panel - - - QFrame::Plain - - - 0 - - - - - - true - - - - - - - - 0 - 0 - - - - - 130 - 66 - - - - - 130 + 214 66 @@ -191,7 +151,7 @@ - + 0 0 @@ -199,12 +159,12 @@ 130 - 66 + 0 - 130 + 214 66 @@ -234,20 +194,20 @@ - + 0 0 - 130 + 0 66 - 130 + 214 66 @@ -277,20 +237,14 @@ - + 0 0 - - - 130 - 66 - - - 130 + 214 66 @@ -320,20 +274,14 @@ - + 0 0 - - - 130 - 66 - - - 130 + 214 66 @@ -363,20 +311,14 @@ - + 0 0 - - - 130 - 66 - - - 130 + 214 66 @@ -406,20 +348,20 @@ - + 0 0 - 130 + 0 66 - 130 + 214 66 @@ -449,20 +391,14 @@ - + 0 0 - - - 130 - 66 - - - 130 + 214 66 @@ -492,20 +428,14 @@ - + 0 0 - - - 130 - 66 - - - 130 + 214 66 @@ -535,20 +465,14 @@ - + 0 0 - - - 130 - 66 - - - 130 + 214 66 @@ -578,20 +502,20 @@ - + 0 0 - 130 + 0 66 - 130 + 214 66 @@ -621,20 +545,14 @@ - + 0 0 - - - 130 - 66 - - - 130 + 214 66 @@ -664,20 +582,14 @@ - + 0 0 - - - 130 - 66 - - - 130 + 214 66 @@ -707,20 +619,14 @@ - + 0 0 - - - 130 - 66 - - - 130 + 214 66 @@ -750,20 +656,20 @@ - + 0 0 - 130 + 0 66 - 130 + 214 66 @@ -793,20 +699,14 @@ - + 0 0 - - - 130 - 66 - - - 130 + 214 66 @@ -836,20 +736,14 @@ - + 0 0 - - - 130 - 66 - - - 130 + 214 66 @@ -879,7 +773,44 @@ - + + 0 + 0 + + + + + 214 + 66 + + + + true + + + border:1px; + + + QFrame::Panel + + + QFrame::Plain + + + 0 + + + + + + true + + + + + + + 0 0 @@ -887,12 +818,12 @@ 130 - 66 + 0 - 130 + 214 66 @@ -921,7 +852,7 @@ - + false @@ -934,10 +865,16 @@ - 50 + 34 0 + + + 34 + 16777215 + + ... @@ -949,6 +886,32 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + From dc37677cc6a733dbaf591b108e03c8377380ee0d Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Mon, 24 Feb 2014 12:22:46 +0100 Subject: [PATCH 36/45] Removing ER9x and Open9x specific imagery --- companion/src/images/library/00001.png | Bin 662 -> 353 bytes companion/src/images/library/00002.png | Bin 554 -> 2331 bytes companion/src/images/library/00004.png | Bin 831 -> 0 bytes companion/src/images/library/00017.png | Bin 0 -> 634 bytes .../images/library/{10001.png => 00501.png} | Bin .../images/library/{10002.png => 00502.png} | Bin companion/src/images/library/00503.png | Bin 0 -> 445 bytes companion/src/images/library/00504.png | Bin 0 -> 668 bytes companion/src/images/library/00505.png | Bin 0 -> 739 bytes companion/src/images/library/00506.png | Bin 0 -> 776 bytes companion/src/images/library/00508.png | Bin 0 -> 767 bytes companion/src/images/library/00601.png | Bin 0 -> 590 bytes companion/src/images/library/00602.png | Bin 0 -> 563 bytes companion/src/images/library/00603.png | Bin 0 -> 612 bytes companion/src/images/library/01001.png | Bin 911 -> 0 bytes companion/src/images/library/01002.png | Bin 855 -> 0 bytes companion/src/images/library/01003.png | Bin 840 -> 0 bytes companion/src/images/library/01004.png | Bin 883 -> 0 bytes companion/src/images/library/01005.png | Bin 883 -> 0 bytes companion/src/images/library/01006.png | Bin 840 -> 0 bytes companion/src/images/library/01007.png | Bin 855 -> 0 bytes companion/src/images/library/01008.png | Bin 911 -> 0 bytes companion/src/images/library/10003.png | Bin 857 -> 0 bytes companion/src/images/library/10004.png | Bin 752 -> 0 bytes companion/src/images/library/10005.png | Bin 889 -> 0 bytes companion/src/images/library/10006.png | Bin 677 -> 0 bytes companion/src/images/library/10008.png | Bin 606 -> 0 bytes companion/src/images/library/10009.png | Bin 653 -> 0 bytes companion/src/images/library/10010.png | Bin 645 -> 0 bytes companion/src/images/library/10012.png | Bin 664 -> 0 bytes companion/src/images/library/10013.png | Bin 612 -> 0 bytes companion/src/images/library/10014.png | Bin 656 -> 0 bytes companion/src/images/library/10016.png | Bin 601 -> 0 bytes companion/src/images/library/10017.png | Bin 659 -> 0 bytes companion/src/images/library/10018.png | Bin 712 -> 0 bytes companion/src/images/library/10019.png | Bin 752 -> 0 bytes companion/src/images/library/10020.png | Bin 783 -> 0 bytes companion/src/images/library/10021.png | Bin 744 -> 0 bytes companion/src/images/library/10022.png | Bin 812 -> 0 bytes companion/src/images/library/10023.png | Bin 451 -> 0 bytes companion/src/images/library/10024.png | Bin 555 -> 0 bytes companion/src/images/library/10025.png | Bin 601 -> 0 bytes companion/src/images/library/10026.png | Bin 732 -> 725 bytes companion/src/images/library/10027.png | Bin 799 -> 881 bytes companion/src/images/library/10028.png | Bin 748 -> 0 bytes companion/src/images/library/10029.png | Bin 755 -> 0 bytes companion/src/images/library/10030.png | Bin 746 -> 771 bytes companion/src/images/library/10031.png | Bin 675 -> 624 bytes companion/src/images/library/10032.png | Bin 600 -> 0 bytes companion/src/images/library/10033.png | Bin 709 -> 0 bytes companion/src/images/library/10034.png | Bin 690 -> 0 bytes companion/src/images/library/10035.png | Bin 721 -> 0 bytes companion/src/images/library/10036.png | Bin 716 -> 682 bytes companion/src/images/library/10037.png | Bin 715 -> 0 bytes companion/src/images/library/10038.png | Bin 764 -> 577 bytes companion/src/images/library/10039.png | Bin 724 -> 887 bytes companion/src/images/library/10040.png | Bin 450 -> 0 bytes companion/src/images/library/10041.png | Bin 819 -> 0 bytes companion/src/images/library/10042.png | Bin 695 -> 0 bytes companion/src/images/library/10043.png | Bin 638 -> 0 bytes companion/src/images/library/10044.png | Bin 602 -> 0 bytes companion/src/images/library/10045.png | Bin 762 -> 0 bytes companion/src/images/library/10046.png | Bin 666 -> 0 bytes companion/src/images/library/10047.png | Bin 650 -> 0 bytes companion/src/images/library/10048.png | Bin 594 -> 0 bytes companion/src/images/library/10049.png | Bin 706 -> 0 bytes companion/src/images/library/10050.png | Bin 701 -> 0 bytes companion/src/images/library/10051.png | Bin 678 -> 0 bytes companion/src/images/library/10052.png | Bin 690 -> 0 bytes companion/src/images/library/10053.png | Bin 529 -> 0 bytes companion/src/images/library/10054.png | Bin 548 -> 0 bytes companion/src/images/library/10055.png | Bin 659 -> 0 bytes companion/src/images/library/10056.png | Bin 563 -> 0 bytes companion/src/images/library/10057.png | Bin 855 -> 0 bytes companion/src/images/library/10059.png | Bin 703 -> 0 bytes companion/src/images/library/10060.png | Bin 1567 -> 0 bytes companion/src/images/library/10061.png | Bin 732 -> 0 bytes companion/src/images/library/10062.png | Bin 647 -> 0 bytes companion/src/images/library/10063.png | Bin 543 -> 0 bytes companion/src/images/library/10064.png | Bin 641 -> 0 bytes companion/src/images/library/10065.png | Bin 587 -> 0 bytes companion/src/images/library/10066.png | Bin 658 -> 0 bytes companion/src/images/library/10067.png | Bin 524 -> 0 bytes companion/src/images/library/10068.png | Bin 560 -> 0 bytes companion/src/images/library/10069.png | Bin 746 -> 0 bytes companion/src/images/library/10071.png | Bin 695 -> 0 bytes companion/src/images/library/10072.png | Bin 705 -> 0 bytes companion/src/images/library/10073.png | Bin 734 -> 0 bytes companion/src/images/library/10074.png | Bin 762 -> 0 bytes companion/src/images/library/10075.png | Bin 651 -> 0 bytes companion/src/images/library/10076.png | Bin 704 -> 0 bytes companion/src/images/library/10077.png | Bin 479 -> 0 bytes companion/src/images/library/10078.png | Bin 654 -> 0 bytes companion/src/images/library/10079.png | Bin 594 -> 0 bytes companion/src/images/library/10080.png | Bin 657 -> 0 bytes companion/src/images/library/10081.png | Bin 521 -> 0 bytes companion/src/images/library/10082.png | Bin 949 -> 0 bytes companion/src/images/library/10083.png | Bin 576 -> 529 bytes companion/src/images/library/10084.png | Bin 755 -> 0 bytes companion/src/images/library/10085.png | Bin 568 -> 573 bytes companion/src/images/library/10086.png | Bin 713 -> 0 bytes companion/src/images/library/10087.png | Bin 611 -> 0 bytes companion/src/images/library/10088.png | Bin 438 -> 466 bytes companion/src/images/library/10089.png | Bin 573 -> 0 bytes companion/src/images/library/10090.png | Bin 580 -> 607 bytes companion/src/images/library/10091.png | Bin 825 -> 0 bytes companion/src/images/library/10093.png | Bin 618 -> 529 bytes companion/src/images/library/10095.png | Bin 892 -> 0 bytes companion/src/images/library/10097.png | Bin 953 -> 0 bytes companion/src/images/library/10098.png | Bin 808 -> 863 bytes companion/src/images/library/10099.png | Bin 584 -> 0 bytes companion/src/images/library/10100.png | Bin 806 -> 0 bytes companion/src/images/library/10101.png | Bin 888 -> 0 bytes companion/src/images/library/10102.png | Bin 941 -> 0 bytes companion/src/images/library/10103.png | Bin 737 -> 0 bytes companion/src/images/library/10104.png | Bin 670 -> 572 bytes companion/src/images/library/20001.png | Bin 751 -> 469 bytes companion/src/images/library/20002.png | Bin 945 -> 609 bytes companion/src/images/library/20003.png | Bin 882 -> 492 bytes companion/src/images/library/20004.png | Bin 878 -> 712 bytes companion/src/images/library/30001.png | Bin 2879 -> 865 bytes companion/src/images/library/300011.png | Bin 0 -> 2821 bytes companion/src/images/library/30002.png | Bin 2767 -> 3381 bytes companion/src/images/library/30003.png | Bin 4233 -> 0 bytes companion/src/images/library/30004.png | Bin 3049 -> 0 bytes companion/src/images/library/30005.png | Bin 3152 -> 2395 bytes companion/src/images/library/30006.png | Bin 3600 -> 0 bytes 127 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 companion/src/images/library/00004.png create mode 100644 companion/src/images/library/00017.png rename companion/src/images/library/{10001.png => 00501.png} (100%) rename companion/src/images/library/{10002.png => 00502.png} (100%) create mode 100644 companion/src/images/library/00503.png create mode 100644 companion/src/images/library/00504.png create mode 100644 companion/src/images/library/00505.png create mode 100644 companion/src/images/library/00506.png create mode 100644 companion/src/images/library/00508.png create mode 100644 companion/src/images/library/00601.png create mode 100644 companion/src/images/library/00602.png create mode 100644 companion/src/images/library/00603.png delete mode 100644 companion/src/images/library/01001.png delete mode 100644 companion/src/images/library/01002.png delete mode 100644 companion/src/images/library/01003.png delete mode 100644 companion/src/images/library/01004.png delete mode 100644 companion/src/images/library/01005.png delete mode 100644 companion/src/images/library/01006.png delete mode 100644 companion/src/images/library/01007.png delete mode 100644 companion/src/images/library/01008.png delete mode 100644 companion/src/images/library/10003.png delete mode 100644 companion/src/images/library/10004.png delete mode 100644 companion/src/images/library/10005.png delete mode 100644 companion/src/images/library/10006.png delete mode 100644 companion/src/images/library/10008.png delete mode 100644 companion/src/images/library/10009.png delete mode 100644 companion/src/images/library/10010.png delete mode 100644 companion/src/images/library/10012.png delete mode 100644 companion/src/images/library/10013.png delete mode 100644 companion/src/images/library/10014.png delete mode 100644 companion/src/images/library/10016.png delete mode 100644 companion/src/images/library/10017.png delete mode 100644 companion/src/images/library/10018.png delete mode 100644 companion/src/images/library/10019.png delete mode 100644 companion/src/images/library/10020.png delete mode 100644 companion/src/images/library/10021.png delete mode 100644 companion/src/images/library/10022.png delete mode 100644 companion/src/images/library/10023.png delete mode 100644 companion/src/images/library/10024.png delete mode 100644 companion/src/images/library/10025.png delete mode 100644 companion/src/images/library/10028.png delete mode 100644 companion/src/images/library/10029.png delete mode 100644 companion/src/images/library/10032.png delete mode 100644 companion/src/images/library/10033.png delete mode 100644 companion/src/images/library/10034.png delete mode 100644 companion/src/images/library/10035.png delete mode 100644 companion/src/images/library/10037.png delete mode 100644 companion/src/images/library/10040.png delete mode 100644 companion/src/images/library/10041.png delete mode 100644 companion/src/images/library/10042.png delete mode 100644 companion/src/images/library/10043.png delete mode 100644 companion/src/images/library/10044.png delete mode 100644 companion/src/images/library/10045.png delete mode 100644 companion/src/images/library/10046.png delete mode 100644 companion/src/images/library/10047.png delete mode 100644 companion/src/images/library/10048.png delete mode 100644 companion/src/images/library/10049.png delete mode 100644 companion/src/images/library/10050.png delete mode 100644 companion/src/images/library/10051.png delete mode 100644 companion/src/images/library/10052.png delete mode 100644 companion/src/images/library/10053.png delete mode 100644 companion/src/images/library/10054.png delete mode 100644 companion/src/images/library/10055.png delete mode 100644 companion/src/images/library/10056.png delete mode 100644 companion/src/images/library/10057.png delete mode 100644 companion/src/images/library/10059.png delete mode 100644 companion/src/images/library/10060.png delete mode 100644 companion/src/images/library/10061.png delete mode 100644 companion/src/images/library/10062.png delete mode 100644 companion/src/images/library/10063.png delete mode 100644 companion/src/images/library/10064.png delete mode 100644 companion/src/images/library/10065.png delete mode 100644 companion/src/images/library/10066.png delete mode 100644 companion/src/images/library/10067.png delete mode 100644 companion/src/images/library/10068.png delete mode 100644 companion/src/images/library/10069.png delete mode 100644 companion/src/images/library/10071.png delete mode 100644 companion/src/images/library/10072.png delete mode 100644 companion/src/images/library/10073.png delete mode 100644 companion/src/images/library/10074.png delete mode 100644 companion/src/images/library/10075.png delete mode 100644 companion/src/images/library/10076.png delete mode 100644 companion/src/images/library/10077.png delete mode 100644 companion/src/images/library/10078.png delete mode 100644 companion/src/images/library/10079.png delete mode 100644 companion/src/images/library/10080.png delete mode 100644 companion/src/images/library/10081.png delete mode 100644 companion/src/images/library/10082.png delete mode 100644 companion/src/images/library/10084.png delete mode 100644 companion/src/images/library/10086.png delete mode 100644 companion/src/images/library/10087.png delete mode 100644 companion/src/images/library/10089.png delete mode 100644 companion/src/images/library/10091.png delete mode 100644 companion/src/images/library/10095.png delete mode 100644 companion/src/images/library/10097.png delete mode 100644 companion/src/images/library/10099.png delete mode 100644 companion/src/images/library/10100.png delete mode 100644 companion/src/images/library/10101.png delete mode 100644 companion/src/images/library/10102.png delete mode 100644 companion/src/images/library/10103.png create mode 100644 companion/src/images/library/300011.png delete mode 100644 companion/src/images/library/30003.png delete mode 100644 companion/src/images/library/30004.png delete mode 100644 companion/src/images/library/30006.png diff --git a/companion/src/images/library/00001.png b/companion/src/images/library/00001.png index 57c8485a91191a8b265538330cb57ce77100985a..0218d0570a6be5207e3bba6c272d9f3c45af1b6d 100644 GIT binary patch delta 312 zcmV-80muH91>pja7#jft0002!80|a&000J1OjJbx00960|E1ZV-H{<4f8GKZ3NJ3m z&`X;D008buL_t(I%k9!JZo@DP1yHFPJn{zhMbz+I1q@h4hmJi$ui~6QS756Pu$uxn zW=X|G;;hLSPR4^Q@)L6IQFp5#@a8y50)#ai+(^tlI(vJ-Vd_^60+pC z;(+|oKq^+r`;ru-I_G(ge*?q5Oh8Upfntmd--Q%Lg+M!l-@*o@Fg?d8`B18YO>Qtq zel4>?e*)|BQWiTwD==U?(e9uf5<}na_;2eNpmjM7HW+j^hd4K941#3| zYkUK5X**ud`*~7;%?cIz&5|2nvQ@Ss1)Ma@C5)-3$BVtW{s3tl60+Z#oo4X>0000< KMNUMnLSTZWREL`Y delta 650 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 literal 554 zcmV+_0@eMAP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-ut`KgRCwByl0lBsKoCWrE0$~_gpJsaXp3{8WQLQ3dsvD`ngiqp zOjk@n#4t0BCtuLpT6D0t!$M*J=Y1 z0AUBfHwfoyQmoVi73=T)!F1*|rmH>x z%Y_%#Yu>Y7)7&`@xd-(|JM~8Qwl|fPjI!Z|GQH>4iX3yca?IJ10Ud>FSH<47rrLk% zi-_RT^3d}JB6(Vj)!WZLTpdF|O3O7RD3)`jaa@dkTDt!9IS90r_BIEeQI?}(S$DV^ zgp6)j?HumNdDp*ay00JM`73LHLY>A!eQS);E|Gu>1UwB&2NJQw2(1#ca6oi(8&BHp s;Nc``qSPx#22e~?MgRZ*00010!qa{L0004EOGiWihy@);00009a7bBm0017s0017s0dCNB zJ^%m!2XskIMF-pq7!f-;H3pXA0008ANklY%m+juIWx&=M; z(j2RZn?t1DdJ6R-Dd<7)U=bxAq}e7%#a=~3JT9}L$;C?|X16O1cc{4vBZ{B+Vqv9w4?~EAUL!={ycmN>bh#~0!GAe%!ncc68djBD? zxXR*F!9+kFVLAz1ml;p^Ca$50N-_%k3H!xihRK$`90s8^;TxuDG(YKj2*jOG$TwO> z(=-&$kza;&xi9A2+?f94sMD+eKC&hfQaxjyzx=O*PyD}zN)IFkS^?7 z5`7;K;WLV$%*)O^%i*gefjv|V#vlSoSzieVbsA#Cl88MdAR2{KnA3*@OpOtv zpxKb>>n6-kriz;jL!t!t5?b+lnFKi^@EL@N^#&MGrd}_H>ez?a!773DA|g$vZ~VG- zd3D0MmWDbqxrA&~X1j@Qf&lu8$1hCAox^TCJ}?+kd2nL82@SjiS?^d`{F$bA7XZC^ zArf*R|JHE34807~5*}ri^FK1Un+4l16e+RjwnnRU$oR@)#_H`Z^&aO3y=bUe?yIs( za6n}6*f@HZJ<4FvZ5<75mi>s(=<6FAd$+OC=mkWX7B=o9(Ok$4gvCcW%;k;)f?%OE zM+uwQAV&kweU(^_#*nB-N+KoIU>kDi3(^`$~|K;dVwmThm`vYRbLGz-nzc2s*002ov JPDHLkV1mr-b+7;c diff --git a/companion/src/images/library/00017.png b/companion/src/images/library/00017.png new file mode 100644 index 0000000000000000000000000000000000000000..678355ae01046bc6cbffeb5154ee2650c372f43d GIT binary patch literal 634 zcmV-=0)_pFP)|ghCdPFCGFgbg>Lc(dN2fR7u@u($Og1kDT= zovtbZru$vw_GThr?df*nTOttL+sSuJ1cHv8tSk|5xxb&>^equENPmrc&n*!kIRGlq z02%`<@S>{@CQsEUvBzN>xg%rxKtXX3J-)ITxb0E5ejNHAU_T_ zu5aY^8b`=32CgzxvkwehKmgFi0)fH+z{(6i;YF-ikHW;WY@?f=aar%O|GP)&>F*Jg zUjQ_co_G-AjF-L@QV^VZFkkMX Uh5FI?1poj507*qoM6N<$f|Gd{F#rGn literal 0 HcmV?d00001 diff --git a/companion/src/images/library/10001.png b/companion/src/images/library/00501.png similarity index 100% rename from companion/src/images/library/10001.png rename to companion/src/images/library/00501.png diff --git a/companion/src/images/library/10002.png b/companion/src/images/library/00502.png similarity index 100% rename from companion/src/images/library/10002.png rename to companion/src/images/library/00502.png diff --git a/companion/src/images/library/00503.png b/companion/src/images/library/00503.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba8ec880030f99ce8060c3ef8aa64a47ab22572 GIT binary patch literal 445 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 literal 0 HcmV?d00001 diff --git a/companion/src/images/library/00602.png b/companion/src/images/library/00602.png new file mode 100644 index 0000000000000000000000000000000000000000..ac46509c27ccc8bc3ed1accc36a570ad29dd8792 GIT binary patch literal 563 zcmV-30?hr1P)&Y z3l>mN24y|~d{E7-0^{IztQOL{~Jq^zzb2TA3 zL*Sf2!mtmo0XQ3gNJqbXNl_z;nFUI5FmWDN`SAGTV~R8+>GKB`qi7OI2PUE&kw0^W zV(u5k0XSuTBi-wOKnl=9XsbGdI9rY*p0+Cr%Rm{dy%>bG;?e=gn7tQpH3TR9nTtsZ zj8&TOq|L}GMK^ml#JavPdO0nu5c2_mb#|lh3|MD9jJ_c$u1T~40MA#$cmV3$8SUYj zuZ;*?hg4`xKLaWX814t|bo1N`5CA~0zP^P@?iX)w!K&*%-^=Px2f$zeTAP7)ieT_8 zcol*e3_#y1SPb9|23VW{{VNLin<8Y@-}l)({Q!jMm4~{1Ng4nE002ovPDHLkV1ml1 B+FJks literal 0 HcmV?d00001 diff --git a/companion/src/images/library/00603.png b/companion/src/images/library/00603.png new file mode 100644 index 0000000000000000000000000000000000000000..0fa584dbbc557976e3d854c50e64d0b5ef86a976 GIT binary patch literal 612 zcmV-q0-ODbP)-5TRKCIPg#3-#`a3LXgGLeK-i9S+U14HbeM0IuLI>jeTM0F?K`IEAJLfV%ui zAQ;V(JpZ_3VR%Y|8o;3a@e%?6;OL%Hkfp_k_aA0icwPub5O{oukW>M@)1nH_iYGia zqyXSc{xJfZSg}R}ZcQs46kti>Jq`iek023_jNnq_XbZ`LE-XmMlJc9dfOsdIBIw~U z3_u^6H)BbW>|Y+lG2n?P1pFBQcNDZLVEscDl>Cdm)8!;7NXAzxxZ2WWkq9PjancCQ zbwgV=vdneXuIM~7%Zd#fYi^n%`Cwv0EbqxVz;|5Vh0d0Prem;7Vtr0>Nc^iA8TTYa z?uHYO#=C9)KRTZ*K(B!&<5;+*4!~V)uJ$6kVwj(V!U0s8x$lUw)Pvf}$84jd-Ury< zv{|8&0d8|s&!=*f2XI733jzR|0SiiGR?ONHft%r2I2Y6-kl&{H|56Xv7H~X2(N0EX z64|aXi9LWu523fB6l6nZ7`Q|T?8X*(M>HzHBM4~81_%se;F}RK9oAq}TfW$n4jj?o yAOk$&1E-A$hXLUI+v6#SIiT3+F={x)st!J-PN9O0)(0N|0000Px#22e~?MF0Q*|NsA`*`M720004EOGiWihy@);00009a7bBm000XU000XU0RWnu z7ytkO2XskIMF-pi1{O8~v|4;)0000TX;fHrLvL+uWo~o;00000Lvm$dbY)~9cWHEJ zAV*0}P-HG;2LJ#9*-1n}R5;5;lfi4#P#nj9X==kTCdfcr47P}L7Z2SE8ez1>gS!-Z z@E?c}x{GLVJ4`5RwnFQn;2@WUbxlv6$Nqwh$Xv0s11~!aOmG+k57Br?rS$o-Ch6$| zUmm>g`~5x-Mp~gZcI^nzVv@XMH6p-@*jKV;H3AM6lx#_jfP=A;t*Ci)4IDI?g?+(P zTfq8gGB8Z1I@WLX5(po|G)(IV*$6oRKBjdT;sQTi+XPs}7~&o@$4e)M4v@rX(P0lc zt+PRocwfns58$suWpEIOm0Dj}8gz-tCAlXh1PsPO{83jLfn@hCO<3#r{!_>&E;woGo4lXPGUo zo$!OcJ3C>%qW2jQ@-(-YJ8>{Fo7BZk8uFb&{;A<$2-~D{uLEd;YmA)q1nG!0ixU_f z;vQeU^dX+dj``*=@Z&wpq-00d*TNp1g!qN{sLOvsKRTqy5LtmZ4*lp7R}&Hkksk*z zl@fwO&i%lZvmXe@e{JXoDo#lk5oY9vUFpU)|B+5H^uuV<3BF2Q z+@JrKty{{YxIguoA8JfW?eR38Q{abMkWz}nbrYcF9n$OCPUwd{lBYG@we@d-9|lEqmSxK*y$*XkCi@C8P=$wqA3MeA*dvS5cu&uLf{9A@E_;!>ge~HvKjyY002ovPDHLkV1gTmj_CjZ diff --git a/companion/src/images/library/01002.png b/companion/src/images/library/01002.png deleted file mode 100644 index e83381a48ce269eac0fa3ac72a8a260854c1c768..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmV-d1E~CoP)Px#22e~?MF0Q*|NsA`*`M720004EOGiWihy@);00009a7bBm000XU000XU0RWnu z7ytkO2XskIMF-pi1{OC5-7C4R0000TX;fHrLvL+uWo~o;00000Lvm$dbY)~9cWHEJ zAV*0}P-HG;2LJ#9p-DtRR5;5`)6Z+uU>LyhXKlJ{v^2sFZY-=lNOqH~Ihf)|J$Z`s z9}w)IOTizQ;TRJutu3q`iVSnG!Oq+~kDWY-Bvht_k`6q08>s_};9+Y#v=H|Cwq4)! z^o55&p5**8LsoHA4)n(qm%3RA~s*pm+MF^$( zu+1Pdg&=K6+xSPMYw&N$HJ=*zTUasEY3%VqZ?RLn>;I1oV@K~5@g9L}a~}@^=2C@D zLn#Xqe&V;Rr;0CV%MN|XLP=Q^xs7rePN~eV`H}+1IWez1t9+aJOzrM4$2mY~fY&fC zXZp0a9zzJO4#W;i9DJPTpo*$^Ti)FmO=IO9cFPMWucIv@|P(MIQREryB=@}PZy z_xRC00iGR{>Gr|I$3Cdy7G3duh;SmTQVrk7`pmw-$<`6^aqH|{xDj)Dz7LMyeas&! zzK>M={$Q}CEvhjA>hjuFKN4}4|rM+wE zJ>LgqtsM?Sd{nJ1aTwwQmEFQH#D`JZc|HvB!Iah=9N)(#UH>?`FB2b|p&C{ZAU>pA zsHWf$A0>qyXX4{nncL-Xh!5l?FNPsL+I6WgzPDFC=xBZ%vd2UJ-i~}Eo{U3$By!^r hA0!hWBoiMb{{eNl>eronMf(5%002ovPDHLkV1h(=bRPf! diff --git a/companion/src/images/library/01003.png b/companion/src/images/library/01003.png deleted file mode 100644 index 88f5676db725a9fb3bfc931e39c826afb2cd2403..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 840 zcmV-O1GoH%P)Px#22e~?MgRZ*00010!qa{L0004EOGiWihy@);00009a7bBm000XU000XU0RWnu z7ytkO2XskIMF-pi1{OF3!@Bg?0000TX;fHrLvL+uWo~o;00000Lvm$dbY)~9cWHEJ zAV*0}P-HG;2LJ#9l1W5CR5;5`lfi4#P#nj9bz9$rxK;(ppr(4!OOez{w_>Q<#jF3q zW0llHnS~upVJm@v3J!DaR=0ZbKFmQcx`fHPLuz(xP_{r}J6Iv5Fbmz(mu!8>A$)jW z0`L2N@AH7ih7x613XpooO_f`wfL1+QvNe%{1SchXTcjXCv}A9I6j14%6dOsA0@BV= zftwO3AR+^>5JH+1xWTY#Y@Gw7ey6GC1*t#y<0I&S6Sh`7BijzMr9%=7b>>i8yg7uH zk}b6}VoQ;kc1A)942Bs?)r7$iV*fP$(h%IGw2CsUTLmtb!Bb11126!fPr~vf%*_I9 zVdD)M#Fhjm$LM8D&eCZ%IHBT>ohCWC63oMy`hG=|$!X8(+2OU&Bn-)~b6kU~ISQ2U*6}aGN8+drShe z-|1TU{C)x$3s=oPm<7Y!6%zZikl57)vj8yW?G15=$3bSuieDf-QY;Vrb)<~*3nM?u zP@YlI%fOE|xTzm#C-B3JxT%9D^MM~$C!YGr;*cN5Zt>lta>$QUr!aj_3j1+u?wT{1 zmVpZD?A%{X#6x~K%@1FNcG!>ZFRi!{@?)+`@FnEOe7BYne~0{-x3+yvMt&?A>Rk`i z4^U#*1N8$dZy$T0e)N=YhaQ3+(Tn#o@}nMo=7ah{f{F*~$9i%vM?n3^ZN_Rj0_q2h z=dU^h)DQmY?Z)}Lz3^l3x8Nh_v3^3|t?x%`IcQh4~mf=6#oI64CP@@ S@WkH$0000Px#22e~?MgRZ*00010!qa{L0004EOGiWihy@);00009a7bBm000XU000XU0RWnu z7ytkO2XskIMF-pi1{OFj7y&&F0000TX;fHrLvL+uWo~o;00000Lvm$dbY)~9cWHEJ zAV*0}P-HG;2LJ#9y-7qtR5;5;lR-<{U>L`r*LO>VWm*_WiY4{~cz8=8RhD%n>E1Vufd-uJb+y6l-vcbDg?E+94XpvI zF=`>?{NH71MNm$HjLE!5#oVxk zd5=ieN4*L}Rc=Is2nJ1AzshTnT{T*is2C_$cY>MKZW1b%S z)xEhNh7jJEEz@Rx=)6@xo^3KeK49w(c|KbBfvgPnz9QyF1;R0ZNig#x-YqYQ+`^A| zJ>s%}l6k~_JmbVCg!xg8{U99kL%Rl0ye?*bXhQ&fM0+ql1~XH?vSH!JG%|Z~H80LNy8RmXu80LN~@E^Lw(Af1?YLEZ`002ov JPDHLkV1i3nh%f*E diff --git a/companion/src/images/library/01005.png b/companion/src/images/library/01005.png deleted file mode 100644 index b4aea5dfe4132fcd477107f168d48dc90c073a3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 883 zcmV-(1C0EMP)Px#22e~?MF0Q*|NsA`*`M720004EOGiWihy@);00009a7bBm000XU000XU0RWnu z7ytkO2XskIMF-pi1{OIm`xP-P0000TX;fHrLvL+uWo~o;00000Lvm$dbY)~9cWHEJ zAV*0}P-HG;2LJ#9y-7qtR5;5;lR-<{U>L`r*LO>VWm*_WiY4{~cz8=8RhD%n>E1Vufd-uJb+y6l-vcbDg?E+94XpvI zF=`>?{NH71MNm$HjLE!5#oVxk zd5=ieN4*L}Rc=Is2nJ1AzshTnT{T*is2C_$cY>MKZW1b%S z)xEhNh7jJEEz@Rx=)6@xo^3KeK49w(c|KbBfvgPnz9QyF1;R0ZNig#x-YqYQ+`^A| zJ>s%}l6k~_JmbVCg!xg8{U99kL%Rl0ye?*bXhQ&fM0+ql1~XH?vSH!JG%|Z~H80LNy8RmXu80LN~@E^Lw(Af1?YLEZ`002ov JPDHLkV1hjaiOv83 diff --git a/companion/src/images/library/01006.png b/companion/src/images/library/01006.png deleted file mode 100644 index 448f590da1b08ff028f1744fd89997ecaab1e31e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 840 zcmV-O1GoH%P)Px#22e~?MF0Q*|NsA`*`M720004EOGiWihy@);00009a7bBm000XU000XU0RWnu z7ytkO2XskIMF-pi1{OLb%HpQ<#jF3q zW0llHnS~upVJm@v3J!DaR=0ZbKFmQcx`fHPLuz(xP_{r}J6Iv5Fbmz(mu!8>A$)jW z0`L2N@AH7ih7x613XpooO_f`wfL1+QvNe%{1SchXTcjXCv}A9I6j14%6dOsA0@BV= zftwO3AR+^>5JH+1xWTY#Y@Gw7ey6GC1*t#y<0I&S6Sh`7BijzMr9%=7b>>i8yg7uH zk}b6}VoQ;kc1A)942Bs?)r7$iV*fP$(h%IGw2CsUTLmtb!Bb11126!fPr~vf%*_I9 zVdD)M#Fhjm$LM8D&eCZ%IHBT>ohCWC63oMy`hG=|$!X8(+2OU&Bn-)~b6kU~ISQ2U*6}aGN8+drShe z-|1TU{C)x$3s=oPm<7Y!6%zZikl57)vj8yW?G15=$3bSuieDf-QY;Vrb)<~*3nM?u zP@YlI%fOE|xTzm#C-B3JxT%9D^MM~$C!YGr;*cN5Zt>lta>$QUr!aj_3j1+u?wT{1 zmVpZD?A%{X#6x~K%@1FNcG!>ZFRi!{@?)+`@FnEOe7BYne~0{-x3+yvMt&?A>Rk`i z4^U#*1N8$dZy$T0e)N=YhaQ3+(Tn#o@}nMo=7ah{f{F*~$9i%vM?n3^ZN_Rj0_q2h z=dU^h)DQmY?Z)}Lz3^l3x8Nh_v3^3|t?x%`IcQh4~mf=6#oI64CP@@ S@WkH$0000Px#22e~?MgRZ*00010!qa{L0004EOGiWihy@);00009a7bBm000XU000XU0RWnu z7ytkO2XskIMF-pi1{OOI@=bGQ0000TX;fHrLvL+uWo~o;00000Lvm$dbY)~9cWHEJ zAV*0}P-HG;2LJ#9p-DtRR5;5`)6Z+uU>LyhXKlJ{v^2sFZY-=lNOqH~Ihf)|J$Z`s z9}w)IOTizQ;TRJutu3q`iVSnG!Oq+~kDWY-Bvht_k`6q08>s_};9+Y#v=H|Cwq4)! z^o55&p5**8LsoHA4)n(qm%3RA~s*pm+MF^$( zu+1Pdg&=K6+xSPMYw&N$HJ=*zTUasEY3%VqZ?RLn>;I1oV@K~5@g9L}a~}@^=2C@D zLn#Xqe&V;Rr;0CV%MN|XLP=Q^xs7rePN~eV`H}+1IWez1t9+aJOzrM4$2mY~fY&fC zXZp0a9zzJO4#W;i9DJPTpo*$^Ti)FmO=IO9cFPMWucIv@|P(MIQREryB=@}PZy z_xRC00iGR{>Gr|I$3Cdy7G3duh;SmTQVrk7`pmw-$<`6^aqH|{xDj)Dz7LMyeas&! zzK>M={$Q}CEvhjA>hjuFKN4}4|rM+wE zJ>LgqtsM?Sd{nJ1aTwwQmEFQH#D`JZc|HvB!Iah=9N)(#UH>?`FB2b|p&C{ZAU>pA zsHWf$A0>qyXX4{nncL-Xh!5l?FNPsL+I6WgzPDFC=xBZ%vd2UJ-i~}Eo{U3$By!^r hA0!hWBoiMb{{eNl>eronMf(5%002ovPDHLkV1l+{b3_0D diff --git a/companion/src/images/library/01008.png b/companion/src/images/library/01008.png deleted file mode 100644 index da3346f7d7751a316dc2cc1085f479b76368706b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 911 zcmV;A191F_P)Px#22e~?MgRZ*00010!qa{L0004EOGiWihy@);00009a7bBm000XU000XU0RWnu z7ytkO2XskIMF-pi1{OOzUh#@10000TX;fHrLvL+uWo~o;00000Lvm$dbY)~9cWHEJ zAV*0}P-HG;2LJ#9*-1n}R5;5;lfi4#P#nj9X==kTCdfcr47P}L7Z2SE8ez1>gS!-Z z@E?c}x{GLVJ4`5RwnFQn;2@WUbxlv6$Nqwh$Xv0s11~!aOmG+k57Br?rS$o-Ch6$| zUmm>g`~5x-Mp~gZcI^nzVv@XMH6p-@*jKV;H3AM6lx#_jfP=A;t*Ci)4IDI?g?+(P zTfq8gGB8Z1I@WLX5(po|G)(IV*$6oRKBjdT;sQTi+XPs}7~&o@$4e)M4v@rX(P0lc zt+PRocwfns58$suWpEIOm0Dj}8gz-tCAlXh1PsPO{83jLfn@hCO<3#r{!_>&E;woGo4lXPGUo zo$!OcJ3C>%qW2jQ@-(-YJ8>{Fo7BZk8uFb&{;A<$2-~D{uLEd;YmA)q1nG!0ixU_f z;vQeU^dX+dj``*=@Z&wpq-00d*TNp1g!qN{sLOvsKRTqy5LtmZ4*lp7R}&Hkksk*z zl@fwO&i%lZvmXe@e{JXoDo#lk5oY9vUFpU)|B+5H^uuV<3BF2Q z+@JrKty{{YxIguoA8JfW?eR38Q{abMkWz}nbrYcF9n$OCPUwd{lBYG@we@d-9|lEqmSxK*y$*XkCi@C8P=$wqA3MeA*dvS5cu&uLf{9A@E_;!>ge~HvKjyY002ovPDHLkV1hY}j;8! z_w#AA!!1XZV^_WT`xeGDTyZJsl@_1>qSm43&(5Dk9FIDd&-XpIcl%>m8HQ)q-XCvJ zVg9_*NxozDUiRs8>J)BWY+u%t#vsyXudVTc>4WLxpYHC5)~{lkCm~Uv>iNTN4MXhP zTb{Dp8S8UcK8OdIPnTiZu}QLl{nn4Br%ZJ(+Zc`-$}(hoe7fnwt=amhbP=QZZWa3} z=N?)$3s2VH>~JP;tEtJ{!)on~m!@hm6nh`&>GWN4t2I^rzzrdHA8v8io0o;Y@SXJU zkS)L1euSyn$ar=3x1N)x7t0=LGGA=eI_0>{Xi-CqSbys8r@OnCCRknm#rx=P>|N$J zYk4_Cx*x7)iBA@^VKS7x$G+aamrLV#!R~tk?g~u%V(UN3|G3HjNc#6X7mhXS%2T|5 zD`kXty((sXU>$c|eroev(S(lp*}vLY%$QE_D{RX-CCiy)_hPw=?rgt>JQFPJDy)nDPRP2EDPG_;0 zhuc_;)V!{$tXU-M8vS%l;j>-d|! z5_u=He--d#bv0WXPI>a9=k9{H2^?{rzBNX#4i}3onal7;U_tqk*uV{(Rs3?>ZKE46 zGQXd~bSL?H1D~;VPbZ7tq}>TS<^M6t81T##@w}7+Ono9Ht`Q}Ur6n2pMGTH9MVX0t z3XZu+sYU5^`QcGOc~OwObAE1aYF-Jdg8od813(3;AO$IjC8<`)MX5lF!N|bSNY}tn z*U&V?(9Fuv#LC1>+rZGuz~IVU*>5Nsa`RI%(<*UmSbAWo7f=I(r>mdKI;Vst0Nb)# A+W-In diff --git a/companion/src/images/library/10004.png b/companion/src/images/library/10004.png deleted file mode 100644 index 1a93226b7a413e5ed42bd7e37de839fca80a7e83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxPeS=2F54mYxgrS zF#h*+aSX9I9ec?)@3MmkdqKOCx|3>K?F*5w3@X-3+-Ayl@X9Pwf3a?b;N(>un^t@f znh>z(34<-eG%dl6T^5eZ&mQuAQ)Mis|GDCug`D-YWAgTuHs}9W%H_$#RbDF+KEjr8 zqpg1S{fN9nG8NKH2^lHe=LB3HC476pnI+dPwXZt%%%P*_rS`4-{ix*H^L2e0)mLV& zU6*}A>Ho$VYn|A=N8W>JrN)`rWs^&j$IV!CD6Fy1vhiH~B!*Z2&8D>I zfQdT;4##gZ_}nI{@Vde0y`1fnUXJS2za|l^dzzL6`)Vq>?P*l|<7%^iYOiLSxekzI~E$ z*~J$|jHeDTt(AV8qw1O+wP4GE(+3;{H4n2~M^4?tYDMEy zg0|=nUH0D-d9yZ!vmD_3$9(3L>+a9TRvZ8(3Xu}mh!V%rl8pQ!2FH}5%)~qe$K0gU zqV&4_@F<|XC`jHpKQ}iuuLM;=f2Ie>09BBJl*E!$tK_0oAjM#0U}&UkV5n uWoTk$Vy10iXk}n9{awq9Oao<8L3w2PRM;o6f~&_^8t>lNWpFk5a7NRwnB*v7CQ+k%u@@^AM=8kc zc*8bR;#K!F`MV!ar7{(AJ+RK-^=EE_!Ym8+eYR8H-u`u((`;Q^^5(#GwX08PsMLQx z{n&3}^{$jC6Xn`#me0EGtWTZ6axLckf#!KJDF>Gctp4!q-Cp7KN^J8Re0BG|-aR!$ zRfuK!yZjkz?6n1(=j?dlcR#`B!hYN!0FU~b*Y=2d&o z+O0lqv??q_@r7x9)s4LmW%*8vvRS7v*517EjQb0ni6~a@?vhj{UHi?;f>^L#BIKZfl)VTxE9j^R95Cdz&;CN#392c9tyboqlo|0w=G_icdZNB zS=bksvg+@L#-kEGDSu5i-MIhjo5Ac&>0X>H-Yl>4(k9dfXwJ(O{9`7&(tf+ZlEt{D>`CllL(81>Szv z)W7AAoKyRRO9$*9i#bi%9d&anFm;NQxJHyXmX>7X7cn@d6lEsnDLCdPr52^v<%dTB zlW4geLXf)u1AmZVxG7o`Fz1|tJQBV7YST|?6lLo+Kw6Dt!l oZ39Cq1A{AbWxt_l$jwj5OsmALVd;UTUO){Dp00i_>zopr00;|>uK)l5 diff --git a/companion/src/images/library/10006.png b/companion/src/images/library/10006.png deleted file mode 100644 index ca77bbd870eb067a10617e107a494c4be51da04f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 677 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxPeS=2F54mYxgrS zFmCa5aSX9IJ@@i{FI7Vkwhs}xn+gFi?Z_MZ%SbM8b&oHRBZ_%##f_X0wa`Jq6^*=&lZi{Ng z;uZRwYZm!5P0PFyk{oa$Ou?ghxxL_=wx~;iX0m&96`r$X9gsC*xx#Ymp<46Dg^C7p z;hb!blMDi8`-il=KlY15?}2;XL{q({<7bw*d9TiG5e%I!6&o!&S?Nq)_0;VXt?q8z z`@F<#ZAF7uf#cGQ8qWA;p9OnYT$*(Ja*giUY)i@VxeGUE@P980duiV#GBY9jH^aS@ z1cFX$y4!5vyn-`9dbcGc@?~si*lIelL6FSVhG6d7DE-E(`U3)5yC$eNjp5 zt;NM$-=f54r diff --git a/companion/src/images/library/10008.png b/companion/src/images/library/10008.png deleted file mode 100644 index 9616e2c1204ef388a4ff93c2acf27225cf9a344d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn zTu&Fr5R21uFB|$DF%V$AkYA~4-VwuaGCks=(o=&u3A=R#Jl#7j7{fO%@Hi>D$J`*c zOXJvMN$WzdOK+aNt@>y2SV2zDqo_3(%Ji4sg!ZGrL!7B;l5c^l0UWV#@I#?n_kjfsuV`kAyH>=!$+ z#D^bYdz6v1a^nAYXZ&?GzIDrSJKY85 z9=7|%iS% z4z7Ry&0D6vd+xN;zbqneEnHdfZ%h$Cl;PUFW`=&UTq+ zy*+McA6S^*m?X7e2HOhOHFo`Pd; zQfg6pU4D2JP+k-y@0_2To0?aGs-Qp9;{Z^BDo8;}Vo9o1a#1RfVlXl=G}1LN)HO5> xF*LI>G_f)<(>5@)GBCI@SN0oIKxm;OXk;vd$@?2>>9R??eCq diff --git a/companion/src/images/library/10009.png b/companion/src/images/library/10009.png deleted file mode 100644 index 1919fc94b08f73839baf30835bff07aa695930f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn zIi4<#Ar`0SUN+2oqaeWcKz^f;uSn3c;=T`F<@>t&CtPwBnXHyMZ<6v8EsgazKE*bk zjca(jY{N8$hckR|_hPM4H>v3_fw`aFs+{=ZpT39n#;}cx^??%*4hg?v2J1 z>=rvQ^m8UMA6yZT^yFpOUw+kGnP%tQDZTG!6_u_~oVOrb+p;BN@76hs88r4+;@Bd#XA^YC`Ab0JLilhox=Ouo@?>}T%SMRLV&&k=A=WvO~?y2qu4dY<1%l|CT{9G36@ap3p*6xQ)F1sG? zIvBa+-->QY_I(#-+gmUF$#^3Cib(U?A9=vY6De_xC~+(;$;dBaa7-!6Ow3bo%uPxy zO0UZgj{?ezg5;g^b8}PkN>CN_XL=j}Do_O}NJ%V7wMs5Z1yT$~28Kqu28OzZrXhxA vR)!{4CT7|OhE@g!SLVuoL(!0%pOTqYiCe?c153St8W=oX{an^LB{Ts5!hZ-! diff --git a/companion/src/images/library/10010.png b/companion/src/images/library/10010.png deleted file mode 100644 index 0ef8056453025c883b384a240761741398cfb216..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn zDV{ElAr`0SUbgi+Y#_q^q5g?ioWMSZ(AC>dG)yrrJ>B3Dk>L20Bj#w+Lgny+ldN~% zD!Q6(n?JX|FJjfIKT`Yue|CSE&lcwYJlf!YL*K*KV!!m7b0vD_J(zP~71J*N2S->! znY1Fm%}aEd{LoKjhf?^~34e@Knwyhe9Oab|xp1O*w&{+Ts|yns#7wK^a0nA z`G$?`{bF^j`=;-^;;~-(=UeX_iQc0n0ctkdUUw6da%$pw;EVF7yUmoMC{@$~}CJULi2X;BlkU8w$*}KJ3?fO2g>B*;7*7aDX?F)J^ zcmBfoHD>QSW163SJ?|i6?A#X_6QlF3L~t|1>?E-Vm$EKgza+F*%PQa$uYymtWoCG> z-o4C<)$RVaHZnmzEy=aNGTYwXJMz@EVp;ihUhBkUy z{gaA?;R4D37#1)1+;eWBq8TvKL`qyEN*qf|GV+TU98-!i6Y~@tbCXhw((CfWqk!_F zAbIEf+}zZ>5>y5KnH~p#3RFP~QW8s2t&)pUffR$0fuWJEfuXLUX^5ejm7$51iJ7*6 mp_PHbmASItP&DM`r(~v8;?}VAz)~-u1_n=8KbLh*2~7YO76lLh diff --git a/companion/src/images/library/10012.png b/companion/src/images/library/10012.png deleted file mode 100644 index 6007e75d4b1e09ca000f3cb48dad7e8175a38532..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn z<(@8%Ar_}&FWYzBF%V(t0w;U#I z>^dM4-NUB7py9*m%ai|~c${|3{_*?Ts>2O0oW8OyT3j=8%~tDz|98A2zT1 z^YOC9wFmFdTKtQ1;&*v&ZQfV!9DTsr%I7PN@Z4Y7DOg&YgeDbA|C)N#*~_hz0C- zK79GLuBlBzu1(kZ;)jP{AHKGl*3R?pADpe%1=DGm0_$Za>|! zGvex$_C0q)pDX?e+wJ%uYM^r8UQA`&Fx!y|AAZq;oRk@bTlocoZpdjVN&}Ey>6) zVsK0;%1q2taLi3gElRJ;503)Mi-P2x^K)}k^GZ+^^k;e;04h)gDM(2yNwrEYN(E93 zMh1pPx(0^2hNdBgW>$tKRwicJ28LD!23O|FenZiao1c=IR*74~(gRDqfEpM)UHx3v IIVCg!0BBAUO8@`> diff --git a/companion/src/images/library/10013.png b/companion/src/images/library/10013.png deleted file mode 100644 index dc8a5efc703cb5933cab1e469cef8f7e05442616..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn zVow*x5R22XmksldCwHA-RsMci85#AVKP__KwhQKq zUjN;qvp-Sif%>jJ7jk#9hBlbrv2`ttHso}fta$gYz#4~3C7v!auck2YGTl-BXe{~c z<*$>=>wUC)8aB^!<_$lt@W8ibiN&X<4TjBg^t}(JbU6RryUHMCf)lHUvtCO1gn(IR zIp4n0BDF^Bq*x%nxXX_dG&EIqK)3#fs?)78&qol`;+ E0Gf*OWB>pF diff --git a/companion/src/images/library/10014.png b/companion/src/images/library/10014.png deleted file mode 100644 index 6a306d3b202728fd581005cd9a9bd36b7e65644a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 656 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn z`JOJ0Ar_~5FB|6FHjrR_pkDCc#KP==*oDb#%2vS(w>FdrFz)NJVvT#mT@vtsNy@6F zFK7xY$G(3{bUHtU^vSRNZvVHtg2Bp58Vy=bv*tS-bSZFcGH%}F+7hBM zWf@PG)XUZ-6D}Xux>L1b>XrSEy*E4MSolgtxcup2RBm@Rl-6&$zUwK~N_cSZh7USdYdz*5Og{rRN{k0>fpxH5xeQslO zVIik>MMi@p3xgK>wuYOI{3hiAAM~8x9$>uDcr>;x<=kGe2`hhZ+@Y=JZ1;ZEX@SaB zw+?u%Rjj}5_)nrcM}F^}UpxOW`SRRbaCN2kwkMV+-W+s%pXhhCLDRH-$}DHEvj-jD zDu$kJ+)?ZB`lV_q`?qhdsaHk*Gs@^`E3bbXcMKSRA|2>+xQ9yZ7ki2t#Zf?)FK#IZ0z|ct7z);uF yG{n%%%Fx8h#7x`3(8|Ez%3RrRC>nC}Q!>*kacfw5V5t{S1B0ilpUXO@geCxd(h3d$ diff --git a/companion/src/images/library/10016.png b/companion/src/images/library/10016.png deleted file mode 100644 index d02cb5cebf08d7dfb0546ce4aa9ba016aa84d64d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn z3{Mxw5R21iCmZ@5F%WP)&Na!}$8)37^&5KO4>>LbDyRzC-f7s(QaG`IdHpue#HYr_ z-;RXsV9*S^r~cpG*j`wvC`0~Hx<%81_R<%Cc7`XL>;HJFZN9LZVY#XJ2&UCGv8e;R_z5o5Db2)E0 zybt(R-n0@B04L+YCI!U^Hb)OC}S<_Cn>c< zj4jG9_!H##80s1RG5%mJ+|YJ$*WYM+U_^+NxJHyXmX>7X7cn@d6lEsnDLCdPr52^v z<%dTBlW4geLXf)u1AmZVxG7o`Fz1|tJQBV7YST|?6lLo+Kw s6Dt!lZ39Cq1A{AbWxt_l$jwj5OsmALVd;UTUO){Dp00i_>zopr0OhysRR910 diff --git a/companion/src/images/library/10017.png b/companion/src/images/library/10017.png deleted file mode 100644 index 13f6ed48172671322a41f177957953aac266b7ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 659 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn zMV>B>Ar`04PPWZD>>$wUezReh2D`uuskV-siHELp{9t(%!?9$7QmoIf37c~aj$Ds; z%)O>y^U*~o&vXyqwK;>Pe^W_vy{& zU$-&lIDefS{(Q~vTOBNy0_J{-4KI2BokO>=Jz(aBue+>OIHny)UYWB}VvkbAzVF7R zJGpw#b9`Yj+wl6cmPw;(2FIN@en0I@PWVnVk^WkkqHtX)^UKqt(@O7Jn6)jrIDOih z>AmT%JNovDUM}cxJfp|3De|A2_ni72h9YKXeHXXs@;R8C47kw~b&Y2&OUE<5C49?L zo~{tQ!Es5jg`-Q*M@qI)lF{u!`~Qx{ShG32&we|&gaiU&P>;Qk0pP zr{I{Ilv_j3Q~}gSdwa$T$Bo=7>o=IjdTqR zbq!5J49%sc)I$ztaD0e0swLm B2vGn4 diff --git a/companion/src/images/library/10018.png b/companion/src/images/library/10018.png deleted file mode 100644 index 552c9654073f98078125965661f272fb469cffd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 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 diff --git a/companion/src/images/library/10021.png b/companion/src/images/library/10021.png deleted file mode 100644 index 69ea3ad1491c7f06c191beb454c8a70a341c1066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn z@18D>Ar_~nUOL!y*+GK+gJv^}zVseV5%>EJAA$_uaM(5UCpg;ZUuvG7I{AU3c;eS* zP6quCxH;Z#Y7Y|l#H8oRG2^h@EQt-lN9z2Js00v^G8&1vI`q` z;*3jcw4_exZad){Y;bb@QO<`;r8c>qnfZX}dS(RUpATta6_);ti4zhwec61)cU_US z^OB%PK1tfXFH>Ixn>FfGh+M1yXZ+$?3Mx-N5Pn+&G!!V zE3Uo7!nY(R(WNjh{KWg{3H^3gyu&7haUTi(E|3s!_~FW5wq0DWP6lq}e$uRaz`%U@ zx0|u{Qe8!DE`|2O@>RXOG|2mkx zez0wx(DGed^kQsdw(r`)EYK3h$giN@yn?;_&`(7VBMxKPcY49R$4VlzavyI`Hi-GEwWeqRW6H}LQaO*5*D+2J%sB9|{pEsv``#TCmpyTK zde!Y25>^Ku{$SrF8nXGd&HV+ybRkmW8d2g{T9T1p#Ne1xl$n^P;Fz0~T9jUwA07pi z7X`^X=jZ08=9Qo-=+E>x092p~Qjn5Zl4_M)lnSI6j0_BobPWu34NXG~&8!SftW3xY4?Yf2i{mQ_|DguZpFIB-<-#;Q0ui^;j4(pO$V3GU9~Gc zqOjJ2dqQOCIrSVS8H19@)jI6Yc4$9gELwc0@7dftLPrxsHUFEmTwlE|A!GXviD*OD%{w7`r{jKVf99G$^J>U3uZsD6U zg;9uk`%#10LhCOWuuWywblou1G5&+E%{4a$cDAr^hl$}+*j9*dPz>eUGTHNwq~1lQ zJKz3(Wth*R)5fFC_HM$zxH|`{b4*^P)v?PTbpE|mPVwpgst4J(j`%5lHrny+r|pr0 zSAA_8gnt+}ozG{jdw#a4!S2weNZt*d4bR*TtmLqN_t5FVb=x`o8#*q$EMqWsFl17S znDdvv@UP55`Tc(kf*JSybP0 Hl+XkKv*l3~ diff --git a/companion/src/images/library/10023.png b/companion/src/images/library/10023.png deleted file mode 100644 index 784dbf355e5a53e57d0a1fab0094e1ae43ec2a23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x383I5 zPZ!4!i_>Q>Z{$6!Ai#Q|e}a?eY$YMNgVGgKdnOpUsu)YfUUN9bq^CK7vorRCe^^TS z&QGG{$Jqm1675yg6E^Xj&)`UtHE|3RV36RvW5VcnC?UGzfU9{xG=uIE{uOL$7W^gx ziAs(QlNz`l^LJD$e7M0kPmFu+r)&l8AM=D~7hV<#IQG|N!Uv1sB;huV1@q=DyjH-m zZ{jxFBKCbdYg%{Q-oYBxl%?qL;RWl8GYoqfO<2`F%NZEkTjg`x?@H*F&kPQC68xa# zksb5&g81+13g)28E|(wJ7KZ?RCsN`XQQ}xyl96A;;FwaBnV6^Gn46SZlwOw~9tD&a z1<5<-=jNv7m7pr<&-6F|RG2bOvPH86O(`njxgN@xNAELfC! diff --git a/companion/src/images/library/10024.png b/companion/src/images/library/10024.png deleted file mode 100644 index 4066cd8e0ee207c2f5c862366d0e07a3f95657d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hp6 zD^C~45R21iFI!JKtiZ#TP#Lr136u5e>?M!AqVw3@A8W`oPCC@Qh&^HUnQz_`J@?)4 z__L{T8mo(BgZ+1IrDl6Yo{T@zF|148i25}yZd&|AWYvMV2Ma1RL>ku~a4QU+pu})S z<*3>p4VK0wA67rmulRWXqC!#sR%We&jo%n@pLd&k+>vSiAU{F;z?rxHKhiX`udv?9 zOh{#&m7Arh(C#9u;@I5rxPU_BxsaJpp?Q}Rw?UKPg_qGKZ#mhwTJDsyw{7&7 z`YwIqdr43Ey7f)mG5JsTH<%au1muTZo-qR$v?3+05haeLB^mie42~&9nTdG{j=4#x zMd@|<;ZZ<&QINcIer|4RUJ0s#{!EVpKn1EG1u2OosaDBFsX&Us$iUD@*T7KM&@{x* v%*xQj%EV0Dz|hLT;L2RtZzvja^HVa@DsgLAdSIy+Py>UftDnm{r-UW|_GHh3 diff --git a/companion/src/images/library/10025.png b/companion/src/images/library/10025.png deleted file mode 100644 index 8a1562e528139134265c19ccba64fd0102526ac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn z3{Mxw5R22Tm;Jq&97PyDY_}=mP+HIW@RIq4+3bl+Rr+fi`R?s0`)b0>cF(GWyUET? zHoRqU)omoPh(em?2nKC4Bnq*isaXcFWx`P{>JGYnl79v!824Y zI&v{9&8zvRut5L4{Ri(;G8zwzb z^;1*f%T7~~lCpiS8##V`w6C#i+tqd86X(x@6}KMk^%g1%JymMyeeB`Ab9*c0u9PnL zsQLc)0$&}g#mii31E=noP+Ypev*no9%gXsPKXg3Xw9<5g!XvR6;^j}(jt8U~9e;l% zbNeA}&u<1M3UhMVXI?zG-tZ)gf8sVi4Uy8lZSG+gbuY9=c|S2bc%jW;=2?^0LZ(;y zdyQT+#IIU0Q>|cQ*$Mm4{=qK-*8jHyMubR-Yeb1-X-P(Y5rbn&QD$PEf@5w{YEgP! zes~m6UKAwnoS&PUnpc9Vpg+^&08oJ{NI^T_8W?Z-29Zxv`X9>mL6E@1=PUc>FVdQ&MBb@0H7@IYXATM diff --git a/companion/src/images/library/10026.png b/companion/src/images/library/10026.png index 704865b0c8afc2a54e24e170c2909ce53cf66608..1ad61712b6e8a8299f91366c0ab604e3294b09cf 100644 GIT binary patch delta 663 zcmV;I0%-l*1=R(R7#9ct0002@y&$6i0007FOGiWi|A&vvzmXvq5da5tNliru-U1j3 z9Xm*U`vH?p0waF{MM*?KRA}DqS<8~cAPlp1{QtkKJtX02zz~u>YGqA3q7z&j-1EEPLjG~0!fk#+rm z=Nl0!fztztqp!A`O&Te*a$s`gT8xyDG&%##)iPu|Wp%X^y5Wgrq+m}6k_cgkBITPg z^uksW7J7}_a)_|swVPGATCKj8-WFq;)d;g0Awz%P0$+6GrqXH(PwcY3bz4x&t)6KR zhNbP+rvpB-&U9WR@!Kz+2k;+iDK<`SR?2+2pT=nOc{$vf)MI^gqR x*!rHsG8KREmreTmk&nPf;3M!6_z3)W0>5Rp4TOcRLx2DP002ovPDHLkV1kTQFOvWO delta 669 zcmcc0dWUs_1ScZ{5d2!}bZMf#cs=85PZ!4!i_>=}pU=MHAaXq3Ls4#8+dS6C3twza z;1_LCnDA%z6l2_G%CJ5`p4b0z^T>E=1t-HxRT}TN^ECxww6tsJNJ3D zex})PeT$X}KU4O-uf0E8^1#xC$q}|sV%f8}{onRxzR zTVrX?B*MPIZnmK_o8@a+=F}zALW~T4Bq_0l);GyXTc*fwW7?x*|73xeSHc4uW2Fi0 zn>7D?89A_8ls--v8TK!|sgTTM>J| z=bM{1f9+n-@bK@=>aXq&CGUToWx4nEQrCW_uD8!E7|f0I%TIk=x!d=Fknx7UN8eT? z=5SPOV^Ed<_wDb@q{h?ct4g{4vwz^Pyr93q>Ej1JU=k21agC5HaV#y#$S-1WOexAt z%u{g8O-e0FugedQni#H}!=MUOQj(Hbl4_M)lnSI6j0_BobPWu34NXG~&8!SftW3p&>UvB{QuOw}zz$mU@8_qNl5$%Q~loCICd)ANl|Q diff --git a/companion/src/images/library/10027.png b/companion/src/images/library/10027.png index b872dd0b20759b37a59e522931afa876f281ab4b..bbf26657e6ca114c53121f51e24fc9c12866b04e 100644 GIT binary patch delta 820 zcmV-41IzrM2Jr@v7#9ct0002@y&$6i0007FOGiWi|A&vvzmXvq5da5tNliru-U1j3 z9vQYU=_Zqq0waF{;Ymb6RA}D4Sj(2hAP6Hp{{Js$7PX3qZ|`(5)81Oa5CRIy*#!|1 zy7v^p`}qDt`lJ3oXO`tN@ZM8IfbVyR@O#y~9y#_vS&i<%dZ7KlEeDvb>V;Fs0;NUV zMSv7!yh|4V$sB+vcr53@TNKnmNEB2d$nH=aG9FVw%!GfR@$3hSJUGvS9ErGS0LTzq zycJBi7y<_gr38uu8Xv0%$c&}r(NL+BUTUY+r%b<<>*Xgw8G+}d_x$xa1sG$y(5aIdqhXVu6;NtqmjWb;qWUGHiP-PJ!+z0_gtn%kpl)4=G)I9Bq zQKmZ$5X*o*M+CGfh};qMhUw`Jm5}v=>jAtkxq*OF^_>DUTD9#5Htn;MUZa6HuLac( zNBowtY}e|~!!iJb$PC+A3x((YG6D_zsQQhWGPSD%PE#dXW`b6{?b7*x_?Tv)Wtu3>gI%eN4iwBMl4?;HTpSt?Yw!XG%$ z(nj4CfxaRywPaIUK!2h3C@FmxPVHA+kZ-?vW*Uyc=WMc?O+kDLx6OBIWx-RdBY=sJ zpzO*9HIauQ;Be2_hGS!Uj@=>NSy%S#In{i*85b)Tu$~2r_F3(v+1j9T+WufD23>HK z0K9lgRvs7hQ?_xse#!p0THBG~rhN|EN&Kc9PuUm$(D1n#|9Ro!Y8KpBzfTqL|IEAE y{M^YxZjTNB6aKcN&(G8U@)^p2JDjK+VMfJV2Ko3Wq(0000|{* ze~eetxoP#kH~l|JQ>%n0Q)th~Dqc3gA2U$p5pH!H50t@`Vl_3N*<2{N(n+vVVInc^}j} z-~Vg>q9?zreO%Y?fAXg2iQT3TeN9$#ne)%6F?{mUtYSS8%4}eI;Xj#I-aI-~W+}>SykJ z5SZ=9De}tf;JPFWr=D|{g=F^dzI<(!$v10Ssg%;uw@gOI3bk(fZqa5aTUy;Sm+6W# zcM|jd7Db)8Lsohft*#@(gTl`tpTY@Oc4i%Z#A80?#H~kaA3&e{BJ4TiJhi)g@Q{Z4ujHdFHK5KT90v zHjfaqV26ZaNzt(1mUqsUPhK^txzcg^O6QeY?6SGhvp1#QZ9Uc(^T+Y-pIaL9nO2Eg!_oswy+CQ%)78&q Iol`;+0Du}vj~6ll`x{3zhG`2g%ug|B!zFhs9OXH!m;d zYwf?o6jJs+=hN5w4CYxm+>f3qIymdjS2j}Ql8ipCeBl$rTBUC%bE6n0ZL!x~(8qk^ z{gzFO_wp1hTlFjH_aFJ$_p_sd>XmYVX+xyMHKN3^v?L?Hh`}+XC^Ion!7(=}wJ5zV zKRgO3FA9=(&d<$F%_~7w(4XmX0H{C}q#z}+B-JXpC>2OC7#SEE=^7a78k&X}npqi| sSeck<8yH#{7+jev`wc}yZhlH;S|x4`OAjpd0%~CJboFyt=akR{0I(A{Q~&?~ diff --git a/companion/src/images/library/10029.png b/companion/src/images/library/10029.png deleted file mode 100644 index 8004650562e93ed77abfb96ca368c3416acbbc92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 755 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hox zCQlc~5R22Xm-pvib`W9zkRGEdyJ}a?N|CDyZEF&>C%67!{^h=*#5qzxC{U)OL3NX$ z^r`^1f6Oxy6!;`}xlH-rkga>LX+mrJty6{l<#zXrMZB+l|8nu^&%6B$x7@c08b4%o zb_|f&E`5R{Az=_b|CqBDgoRBjoV@ z$(0)4FLyVO~3eAP|)E4W({#C*n%Wgz?(?rwB4*6^zCB?Z<5i6`3GWN#IhAJuLZr96Gg{+o7Vvx@ z>+JOsPLuVs0tDh_%r{G5Tc15aV8+4Oxj#1W)@N(z#2EfayZz?x2@{PfaZ`>D8B)A4 zY*95{liw`$HaYUewEv*#(YH72SdWYFXI1bmo7g({qtJoN?R%5c-!NEgsoN@jZ3DYQ zz3POHFo`Pd; zQfg6pU4D2JP+k-y@0_2To0?aGs-Qp9;{Z^BDo8;}Vo9o1a#1RfVlXl=G}1LN)HO5> xF*LI>G_f)<(>5@)GBCI@SN0oIKxm;OXk;vd$@?2>`8QG8q5> diff --git a/companion/src/images/library/10030.png b/companion/src/images/library/10030.png index 705741cea320628dee122dea76fcd88a37635b86..c109f03f172a19afce609b228eafb477665636ac 100644 GIT binary patch delta 710 zcmV;%0y+Ka1%n2V7#9ct0002@y&$6i0007FOGiWi|A&vvzmXvq5da5tNliru-U1j3 z1SufIBT6x3FZL>q+(&rj|`#C;Ho zpcgW1i9|rAB}oSr2M`e=pPC0E2tfiFC#rKrR3;MC;!A&Ci)Rqn>ri)da3Ns0j|lv< zThb!3oMb~Oi4t^^k^Rg-L|v(o=s_soS0WKm_^HhSt89J^9Trx@UmS*F?KNsAsBEIkAZU#%!Jgeh>8Lf1E+kMn zK~NY1*$033R6q@FIH-;7g)IWm?iW9`q||DN_b!ApMD&@Y4OjBB5hBB*te!yi6BIeps*$E>M*ce+90upT%@TLq%?f?w%~d2bHDZw&NM z(|RBfacM%rTQeFgHuV?_RJUtg_eL8Ard5~d{sHS#3zKwQioVnn=00jFpR=`7=@72~n}!ut&1 zmk4g$7lbhpHz08K0FXPez`Qf!T@~zeVExYMwh`_>{v8G2KOw;XtpaB&A^SDnQ2|%I s(kLB2QCq7DOc==TlwRx$UVHukC;$?kS{DxWMF0Q*07*qoM6N<$fR delta 683 zcmZo>d&N3If|HQ}2!5?~x-?N=yq@u=r;B5V#p%{7j@efnMA$!wrx~(teCf%xZFY3^ z$0Z%nyCkY!xqeVKQU4xPs3?B)ng;hh5&f&tADJt%^;-{}+mf)9``e{v+Yoo%x2a1P zFV5Sbc>biy?%ACkmOL}%RetXO-o`LZ?+1T@ws#ub%JHOr z?_R+!4Ilezk@|x_p5E*J{dVnpDXXpXXUv(mZhq~aPnOM7?x+nsX0K^m_fjJbCNPDl^~p#=+` z=WCflDr;U6G*EE^bLKB23_wpfLHV5``0ttkJ${T?fQ)}tSh4|r-n0*uGm=(nEK0b4 z9)uoIccBf493|4XCv*fk1V}7^d#+UxpehY;#Q;P^_+5lb-lHjsa0TJ927blJ@h8uE zgxKGnfl6pJZ>|UY+EEn>F9V1%?+3u9DtF3c8r?owtWuix>Gfx>M;M^rA5b`HiQoD_ zM5A;V8SQ_Mq*R1?XAnk?1uO?HC4L~g2t;{#?e%L85MlpdpLk&5#6Y&7UmUX5 z5|vB)=CV9~puOX#6yLJ7lUFYe?hZCTn4om*_1<~K@7!mr^%-sX@c7>6qpc5Lm-bHj zC-tlKz&1z40E->fZdwy8A{aM1#6(pvD7A5NaersHU&6hl`hm$W0Sn*saH(Q%^Eu1v zzkLu`YuVezKG$T;HptaIJ<*KM z?yYgxI}R=Wwakwnp0zv9c&kdykonCkx1?DI9rIJT&mK9bkos9d_QlFx$pdR1rhO6r z<8da1pUd6Q>c>NijF^1JnEZtXZ;u!9bh5MF|5wjAC*e@0PC>SD$s9F@OGlXxEnKX7 z)#&P--u23+t3U1LYxnb8bnoIq>xQ*?D;t?_temnhowZl+)N1$88Q-nnxh3?ZY22Sb z?N09j&1avzrt)x>tU9(h$8cd_&IH9GgU1h~V=hT?KcC3J@1^WMFZM&tS>Afyw&Dnb z-1LV+n_3el#7jh0DqRTvDb|%}Ht}-QrH|?-KEIsvI-t92QP9$#9okD(4eOnnK5Bk{ zF*LI>G_f)<(>5@)GBCI@SN0pw eNQ8#m{FKbJO57Tj9$4xHN=}}xelF{r5}E*Qf&}mY diff --git a/companion/src/images/library/10032.png b/companion/src/images/library/10032.png deleted file mode 100644 index 1ed9a3801cf5341d7f53bf302cd46d981f402b9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxPeS=2F54mYxgrS zFs6IDIEGl9UV3R`)?otywg=pdyPY>)<74BM+_kLarNEkv$#Dx+F04Dt?ZPMPrEc#e zx3o>H`it_B2^acGUj#UduHKenX~iFzCEzCi>F(b{3TK6dzcOtWxBQa8BjU*F@XNqO zfsswZiJ?z{EkT!KzSU;e+NQDxmYZJ(Y!6hJ^k5(3_U5~v%2;--Z+y9ww@%3CZUFzH z#)>DBjHMnS%q6Caj`Su;Z|Y~SQSyDpRl)uI{W%*Z>9TojX%CDeG#2drA<^Y@H1}b^ z`a5k+r?1C6%~wnp?ab|X-lP?>S6^>iJcJ;Q!)30ti8C0MAKwfmGz6l@d+y(`zI{h<-&f`jj3ttn?@6d|E#-otr@F= z?yx092p~Qjn5Zl4_M)lnSI6j0_BobPWu34NXG~&8!Sf stW3*}V}Y#Iw&eEgy-VYj3$ojtrt@i9oha~r zu+L%TZ{Kr`$}a9%`)T*@6eOjZ|Av9RX(KI(EiEt{qs@+>|e1+3fkD%*vl}5 z7O~f*?r%@~p{^}%PUoI8bze-sBz>K?@Y9C0 z3!n52^0U`m%3L>D>c_o<6|=4zI$u3>G-a0gM7A3HX@8Dg*uFuq#QwL;nHAq(?x|p2 z!B?`%@3i2DZOvJWCJDus$UWWaWsz~q{O2DhuD*@wQTY!`{^@4F35%McUN6GPdGXpo z#~{sFiqEq6j&+*7|MBB$+u}48i3-WSM+}QjdEA~{DA2jPXD55t)6jD>ZSI^n{guIE zoql;jrD=oOY4al|nF5}q&Drwd+_HmqW_1kF^Bq*x%nxXX_dG&EIqK)3#fs?)78&qol`;+ E0BQs*M*si- diff --git a/companion/src/images/library/10034.png b/companion/src/images/library/10034.png deleted file mode 100644 index cc8b37afbdd2e93d09354c1d2580760f280e9cbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxPeS=2F54mYxgrS zFdp=DaSX9I9eZhS-faT`_7B0KQ)F8Tt}bX=d_3h$!j$OUTh|LH^j}!&EVT2(g|&4o z`@3Q!P6%zuc4v~^b?HL@lWN7@#VV7!*iZjBxU1iuQ^G#%`0)jTZUxgnGFluiZ3$4# zP_3_ad=Pc@PK{JZO`zM3jJ!N|gRXpxNh~du;W8Refke8 z$63y9JK`N$|HU^g`0;Ni&%A}@&v{CM9p?LS%EYP%JipJWP7>2Uz4Koz7QC9x#cD!C{XNHG{07#iss80s3Dh8UVz8Jbv`m}wgrS{WEz inJfDZMMG|WN@iLmZVgKhEcF6vVDNPHb6Mw<&;$U>`w++g diff --git a/companion/src/images/library/10035.png b/companion/src/images/library/10035.png deleted file mode 100644 index 2e14bc9412025e17291c1ef01169c29af0d34e8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxPeS=2F54mYxgrS zFh1~faSX9I9eZhSk+7iv`v=jq04}z`T?H4ECm6XptaoL!G}e1@LfD{A$T)qL3EOs) z17`zv9GqjLr^Mf7w!1q0We@lK=jPYy{**R+`sgRO)%k_Oo+<1P1oc=aoiZ@{BU{>b z>y+bXc@r~d<$!P&L6NEoy#+fiG6ruwCh9C@m?JRv@cw1_O&65TY3G#QXL%_8$p6S! zp2DhwpAXBp)id4r{zX`;?R>?Jdx7q3k?D=!Z%=dgSkQJspy0Ykfk1)aj>+w<*Lm)h z8MGc{tN-GVtkU4xJzv5n;RDlpjwUe%U-w6~r@JdRTsa&Rc(lRc@g>fA%&g0j3nKct zuB30_ntIaV>&g~w0ShnH+hqcoQ=`1)3eGv~E|m9tlg;iW^vGwsYy-=omD~XdLL7Iw z*Il#qcqRCt_3gpLeYe-Kg)uLvf0gmEj6-eCV;yIO56M>~Gc0fK@qETI?f&Gm7X;4O z#fh%S3UeShhyIk#U<+R z%$n=HD{G6*KP#Km@SeOmn=zy3+*6xrOxG*QTlj6CSoR#)EgT^6Kh^5)+~Q+biU&P>;Qk0pPr{I{Ilv_j3Q~}gSdwa$ zT$Bo=7>o=IjdTqRbq!5J49%s Nc)I$ztaD0e0syqL7v diff --git a/companion/src/images/library/10036.png b/companion/src/images/library/10036.png index e4eb4667fd8dc359f30f93d9ff878cc38d180197..ec94b1a344098d2b189c4ac04a150c7dc79de829 100644 GIT binary patch delta 620 zcmV-y0+apB1*!#*7#9ct0002@y&$6i0007FOGiWi|A&vvzmXvq5da5tNliru-U1j3 z86Ia9>Ozw}0waF{8c9S!RA}DSnah^MAP7V$PyYXxYZje{FBA=$Ggf5%GMUBLTLHk^ZpXXiali-=V!J2=xPOI+uw#-e=GN?0 z6eu-7=Gz!fG&orU=+lpun4;U}gqT z3%g{vr*-P#P>Iw4wUA4ZPFobi60{=AB&@HfzDn$up)zj7zn*9mBS2B+9CMT_Yb@NO zYa2%2$TO9u27*R{XFb&z`_+c7PC&Z?wb-p4uo4CgT_DMUdJ~7dc-WUNYD7fa6lVON zW@+7woF9J*q(cDyAh`(RG>u+abF9jT0NMn_X$)&5P&e>et-3R)o>VaGBY?7b0kJW#MDuVjO) zm4Gzbm-yyPxW5nRe=uQF8KN`gSdek}VhI>`+y43R8Sn=?^UOm~;oOY?0000ZP#5f5MX$)k;yuGfvN1-S7#ry zO%dVmIpX>v!;&Frlb7R8-B=4RF|Ad5n*@)ViA>B;O0?-YzHxJZ`r5E_;^+P6NT_u^ z+nD~$(CTOUjGP=k4deGlXC!9nt8AWm=RV6q&I+&XiDau4VaIM=MKxvyT}1~;xyaUNhRKQF!{)QTx?$u0p>|cmyCudM*HoXi34M?< zK5>q5nbGM5%?(rcY8>ukDq(#w_shZTYiZj!AJua)3a?4!k#5~$%UvRQY*UN-@((*5 ztS36HeaxhF#Y)eNYb&2;-M({KsmlyPKS+A1ugJIU759EW$^P(hrk%lkf8?jA@E-`# z*lWkID&f(k$didhzqNUOe!Vi`lg&G>Lz@<5ANa+u`^-slL-o&F&qTu(zWi4GD4zRE z&);Wh-aEPU>NiaO^4K)u=c@ZBzFv+iQh0Eztnzt$ZSV$#1)+C68?874GwPSfNdGo{ zI^nf&HEYlAwaItqd9Hpi`R}wZQ$F7DT7JXf)fcX+S}|Tuy@Ln+b(d+am3gsC{^F0{ z2a33&`o8clZhh3JZmXOOjB=3@*N76w(vpn)A_m8lqRhlR1xL=@q|~DHy8Q5{iQ&pQ z45}a{DTyViR>?)FK#IZ0z|ct7z);uFG{n%%%Fx8h#7x`3(8|Ez%3RrRKr;~(`OLo80$UOt;AY$(9+U?b0uug4R_f*)|Xxyr?o+s&_BH=6IFDrPn{@of@cr-moQpoFbANIu*)As}U{T?%eLUWG-j`|C_b)b<0V{oCpLIEY)>*bxxA`XX(+R&9 zSg!tJrE1na7v?eV|M-0V@0Hh|YJGJuq7wopZvq`m_ zqh^7v$M&9@@A4<2ndCxV{%|_4a7R(#epBC~pX`A$l0W9L=C1}uy-0~`M2TZ*Nk)DV zgJVijW@4U#V{TGvQF>i|coa}x6eRDQpPQSSSAwdbKhxs?P=P8)K}upts#S7PDv)9@ zGB7mKH89jQGz~E{vobWXGBMLOFtjo-xH4Dv8;XY9{FKbJO57Tj9$4xH)WG2B>gTe~ HDWM4f;xQUG diff --git a/companion/src/images/library/10038.png b/companion/src/images/library/10038.png index 69425a5d3d12ffde39277763ee0f0897915f696d..71e3824f6f5100e1e329e13cc747d9344b1b1167 100644 GIT binary patch delta 514 zcmV+d0{#8`1;GT67#9ct0002@y&$6i0007FOGiWi|A&vvzmXvq5da5tNliru-U1j3 z2sQzEVW^XB0waF`u}MThRA}DqS;4NuAPmEZ|Nmw0u=Z`G86+fmNYgk?Ent(xE-Xn9L6i+g4)QdxjtZvU`eq1bn$%X3oI5b`$8R zP(`Sv#FhFNH7~mYnm{a*fGP!bGkzigltOMKfR`l=gOYzE!$JJ{KLntbN1_qwD5Ma8 z!6oW8{UMD2O#SLM{45`Ue%pu)0tWnN=bD0VD1#QCewxalCg7Wfgcl)gIzZi~zdS3( zULV+QMAlX}2jB}M@FVaeV0CU60l@FaEmrbIe7g4o*H4KZK4U*%ygsO5Kv=?GivWb5 z*6L%h3|D{gT?FV*A0lMv+Kk~?z{-~F#G~;Pa1GqSz(YWsU4J$3WRP++(-jU&LFl%8 zRHT28*dHO<;vzX;t&k0doC`2oEesKfJf3r~Mk)G-b$h;s?*X1V5;N`CzHq)$ delta 701 zcmX@e@`rVT1ScZ{5d2!}bZMf#cs&!hr;B5V#p&3~2lIpt1=t=$@|5z2ZaXe_E3cBd z?_t9qt;!Y|$5j#T4?C`?J5&lCuzkvOO4wn}w+q};W2;`c-Aegooo&rMt>}dM`-)@6 zYS&zj++8HKUv>i5|Ji|fqKZ+skBH@|&^M`79MK z4xhAnHi%f6)pMPU=2;?QVZvOcAD?hdsA5UH+?TS7DW(&q_-{O}yl64w%GE40>YNn6 z*6_Qua}-`~Pv)7>Um*L0DS76B0Kv8mhpw?mm>+rK&sicF^z^O5p_uU8it@F$n%%Re z`d`&6N#)Hy9l9#@;);`sUXwVd^)6EU%pLGb=+AD-$zq14AnVgDZ1ozX6RzXvob^$xN%n VtzqebrCy+f>gnp|vd$@?2>?%cE~o$i diff --git a/companion/src/images/library/10039.png b/companion/src/images/library/10039.png index 586fae0a569d4b3ce4f6110f7f07fe54aa244234..9715eb04c9634440faff222bd535f95ec27b0c31 100644 GIT binary patch delta 876 zcmV-y1C#vJ1@{J!7=H)?00018wCE@R000AXLP=Bz2ngHZPv8Im120KLK~#90?OWTD z!ypJXJNy5?oP9{wu_}mi5p2)H&UBk5aE_uNx$gT;?r~ig@@)tg9<+{JQLGQD0d95* zBtQb3acKXL^tX#0I)I?`&5z|%jMu;Q;|3ks;f=;~NPoLeM1KJ?uFKATDaPyDh87@c zYM{h;Wo>u?lAH!MjMoo6K!7x_!Nc`^-{Pdt@_C2=si#4^WzrbqOajjlApL7lu`E8! zWf_YkK+9uk{FVsLhhG7d2u&!bmiyY*6a5IF$9M@p{yzBK`*<7DGrX~%>;+KT_T|uF ztSBG4A!y4kJAYQ;T3!G?>3oxhHu#Z2CIoRvH|D|*^$#Rx07VAN;$=4}vw1ol!Xe1d zfeADkylLPl4-f&R%I3=DpWOzi0B7ITR`pB)T0En^{Od%9GX-daOs2a$Pxhd}nF0{; zXs}m?GZ$eTPzc&W#U~0tgbg#BtD&-}vJhr|Zj;lTFn!dsg*-ShQT82p$!&+hfIojjz9jfPYsk>td?)POwKq2x$3S!wL zQXYU0ja&g-raS0x>3Z_XF! z^?+_^qJNpI1#xPPkWJ;4(0h>GDCd9vQC7z}0ZJ|)qK8$K%B;Z)B=8w;p!FHSbTza) z9`kmE$Y%L5(Wa^a-AYH5I4z4=9EZy8#mniQYT#zxyyOS+OW-_!IQ+Y2<^Oae`<^2z z*Z{g7^vT2$fZ3CbD^Y&6s|vE*ST|A8TlP)qOn()LMbK9vmSTt;UL{X6T+o$pF2G=8 z!X(b1RvK~O)7c1cC=czmyk%sI`$>_vA&eKv?Tich8(;>sPzwFXl+qhv0s`#XBX(t2 z$R}_iwY>{D16s5+5obwvg}1CS9o`kO9IVWyb!-7Bc``+V?j3A2h%JBtv}4gBYd{O= zpk-oeT;~@Ez(NAMR2929m*~ILDAp+19yysx)n#hkH)zp|EMPY1iXl=Ok9w-#S0j@Ps+{)w(Ac_gP-Xn^s-8o88b` zKTTpmmU>^p-NhUY72=2QmNaaQH(bP+_hPlY{eipI=86sb{qMF2p6kwQ=8Flx+mmpN zdBJXF1*QkqkJ1^Y{l3H!T;Y0Dt9rvf2Q!I(18KT5C7f zvFt8qjOpAWnD5jf;pf~@*?V0pqFJJ*#!bWYTS`IS6z6rv1jOV#cmlfor4FTOb?kBr z(XW+Sx4X+RL{EtQ_P(G;Z|^u?eXdx!|NTNky?niX&zdC?Jrnl@6in*k{-?6r;r273 z{XyH;dIweV%+b^lHfLfl+-S`1$LSq!z&_*RVa^ZN4pr=kxxZe{?s3H5WAYCl>^AXU z^rCr}$o7H{z8AF?ii>~JxK;6E(Tc1WKObIwcy4D|z=x%mr_Ou&Ira&km));zNhjtd zyk1adT6*mG>2DU*vKP9XXPi}%-&p^*f1>ST!5CS+VKdAc7@Aobnpl~bX&V??85mrdEBg&aLvDUbW?Cg~4NDI! R^#W>O@O1TaS?83{1OQdcC@}y4 diff --git a/companion/src/images/library/10040.png b/companion/src/images/library/10040.png deleted file mode 100644 index a6f575c6f1efd42f490924d207269975bf39fe07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x383Ib zPZ!4!i_>o}ZR9;P|MipZw)mRDEPF4wpOEbF+C0cV1aHKE?1x8jI(EsB=&xw?{MwB>~mSp4?F*v3aWhUk+IOZm$7NytaherYB zMM3h;`MJ5Nc_pX{`ZGNa02Qc$6r?1Uq*^5xr2;7iBLhPtT?0d1L(>pLGb=+AD-$zq n14AnVgDZ1ozoBTz%}>cptHiBg>4BwQKn)C@u6{1-oD!M<$F82d diff --git a/companion/src/images/library/10041.png b/companion/src/images/library/10041.png deleted file mode 100644 index d7c5094495ecd11b129e89b9963ec13dae8c3585..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 819 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hox zCr=m05R22XSI%dNI0~?Rm^IfyzNIA3kty@O!abXp9CjV|_N=PlP`M!7R3Z3C`pEJR z8B(^DpI+rwcP`lOW7fFkWKMnERpXP#bWR)m*|uxdulrm-UdrUzE$R=r-x&7izd{jz z$2Yb~9LKkO@p98Hsh^RJ60 zvYkme_v@g0+N-D58`O;j%^fCj_j_5aync}V+gz2OaR=wJ+}8>@x!mg)SNOwTza^`; z*T#2;@hh!PTI%PUzV4vWF%|LL#%WVUtfc2W+2tZ5l$(A#d&RmE31bswi8G>EOl}W? zb|10i_G#37mbf?Fob{2E{PRau-?VSCh;QfIFSjG6;pC&dwU$yZiiCXLWXH~mp5Xp~ zkHdKPi_-%A*F-90`rSCTF(_%VnmrN8Iy6sC`hja>T7!+-i#|7&carV3S_dB5+3A0n z;<>f;g>}O0cFa7*n>vjC^8-8N6E1GpE z+wefrsjQ3K`HbeR?=P@fuWvsm79o=;AG7X7cn@d6lEsnDLCdPr52^v<%dTBlW4geLXf)u1AmZVxG z7o`Fz1|tJQBV7YST|?6lLo+Kw6Dt!lZ39Cq1A{AbWxt_l$jwj5OsmALVd;UTUO){D Mp00i_>zopr0Jlj|ssI20 diff --git a/companion/src/images/library/10042.png b/companion/src/images/library/10042.png deleted file mode 100644 index 6f4aa2b6863b57c685a458f430705e0d56885ab7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 695 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn zW1cRKAr_}wFCWaiZNS42uu5vtX@R#hoD<&~S7|Kz>s_DJt{A3&I{i)XvqJ~INhUww zm*|#T#x%>~(pur$?N>XPf8Si>;l=h$zA>Hs#CiRNO|ecpn?&z8PU&tpezMz;!|JCp ztJFTJo$pM7p0mic+a2A{v&!?KiA{n<=!FYL5f5I5{HbNkP;FK)uu071X*?79gyo&Q zX1&RexOr)3qZuc^{bnSmYLHTKjzLfMKyNVfLA}Grny0C3)^cdPeJsq=B{)oBa{gTo z$7Z?9>i+Zhiqu}vVijO|IzhK);vJDsY6`BK3XIdvAK%5Vo^x>-|1;JfyTxC`n12g; zIQ_kKo8*S~@3k#hzH`;zT72@oP4C)}A7|aQ%a>Gg{&|xBM)zHf+;07+*H1*x&U3oB zM`X$O+q@Sfw{Y@Ga9tLNTv)~1cSuA;`MTRPj>}uluMsfx>pU6AyhUQS6)VsK0;%1q2taLi3gElRJ;503)M zi-P2x^K)}k^GZ+^^k;e;04h)gDM(2yNwrEYN(E93Mh1pPx(0^2hNdBgW>$tKRwicJ o28LD!23O|FenZiao1c=IR*74~(gRDqfEpM)UHx3vIVCg!0E{mfEdT%j diff --git a/companion/src/images/library/10043.png b/companion/src/images/library/10043.png deleted file mode 100644 index 7ff6f4bc7c99089aae6ddd1e5a7a6b3003d450b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn zUQZXt5R21CFB|5`81k?NaPjDrYfV1o(;#zTX}9Z?#ZNfw98F@^9lhh?97gFKmY!{XL}J z?gTG#>kpJ+n814K8G9M+-A!Bae0x_^Rm7ZW>47WdwpIq zJLy(a_ty1sUi_~b)_#A!BSF{t!>0Wo+LYtnV-BsVz93vz@wK_N$|=r3veJIxjVFTQ z6&Gq2oVz1zmD!wO6cRjPpZ1lOYbz>0aOy_&M%`PWtmt|A$!o2q;z=^w7S=j1eBmTi zQ@py_L#=lC{WrIl@2VEq-uZUXja}6NoJ)0=nXi~4vnto&xLw+nOaH2-+2bOvPH86O(`njxgN@xNACtUwR diff --git a/companion/src/images/library/10044.png b/companion/src/images/library/10044.png deleted file mode 100644 index 0f5ec33dca432c9f1dc1d4c8fcc486daf65f820a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 602 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn zOivfb5R21WFWUPZHV|PeaF?`k%i-xLZ{1|5P$SxR;6#Xc>5CiMqNNE>xYkuMDzn9$ z{PDP2Pt;SYlaqhj*Wy3Vs|_u--Yqn6h*m$!@tb+!45g*6M$-g1Z=O*#x&*pd^#t# z{D8WqK}vLE=|+#5Js)#F+Hx4*Pig(ixhOtm?aNh74=jKA{%T!!(`mx+wJ_)aqSPu1(FBKn9eXv3x06?!LJQY zJEz!1IGHzD-)`soxlgt++wFn)JMpeVZf*j%Uts3^SX+f96Ay2~ztQ6(4#Bd)#C-1jd9&iEBiOV`)i7ei4IXN>OHFo`Pd;Qfg6p zU4D2JP+k-y@0_2To0?aGs-Qp9;{Z^BDo8;}Vo9o1a#1RfVlXl=G}1LN)HO5>F*LI> tG_f)<(>5@)GBCI@SN0oIKxm;OXk;vd$@?2>=4b<$C}C diff --git a/companion/src/images/library/10045.png b/companion/src/images/library/10045.png deleted file mode 100644 index 4e195cbb47a8feb6cc5bfa90fc0308bbfafab673..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 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 diff --git a/companion/src/images/library/10050.png b/companion/src/images/library/10050.png deleted file mode 100644 index 13f2c3748d2cb6f361365dfed7f2fe32fac71bf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 701 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn zGoCJvAr_}oFFAH!b`W8BAg(6CuevjnuTh5O{6{5S5v@1!kw>!?T_?zSsRtdLeEYCm zSYqP)-QNWh4X29kUKEjE%`wX%u{x?pA#bVYyyR_5@;4Pr{-}6=w%VAvV(Yv$+DyOZF{wdbH6hL(AutVB_%$+e4uVw|6H7YSf%h5!tlt`UQ~H^1@Aq5Bt{(PYPnNzpj34 zMHA15DXM*L%Syi|&OD^%dVA+-1C7<|v~BNg5;(9n;Sx7rN=u;Qr$3D6t(IJ#`cL4p zou}p(>mPO+)$#JHcW1EneEE1V_E)Fl1M_q0xkhVa&TVs)_xdN%uHA6_)ajEP*=v}t z?K_;d*3tV{np@%&tL-&=GbeRp?t>5b6fb9&!10;loZF_tp?Wwv82!~dQv z-hV6kmamZOj^A-fqOWet>T8dSEOKT=#vR(dV^)mQF~=j8jiDS#zp`#b^|+?r`DYp{ z!)ei@S0q>{*u6s9?e}-pJ!g)dY-HJOZOwWA(DxOyyMHWixq38J#%}5cRdP`(kYX@0Ff`INFw`|P4KXyc uGBmL=G1E3Mv@$TbGFSE+iiX_$l+3hB+!~f1Sn37Tz~JfX=d#Wzp$P!5$sS1n diff --git a/companion/src/images/library/10051.png b/companion/src/images/library/10051.png deleted file mode 100644 index 00ef00a9e28eaae055566428fa6a1bfd662eb4a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 678 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxRpVe@%FN{ZVU{J zTRmMILo80WUOKPMQYgak;r*AnJzL)1xnVT3xkzq%X!Pno%3)du&PM90yt=1DHcG;#m_xs+$4|?~1eYy90-}UdOADFvksc*QiEYa7H z|BumeVb&`Vo8YAnBy6~ZT7ygu8|~;wd%^OnS54G8L8`Ftpud!1r-PDYvc#&5Cs`Qv z`8b0fX+HQU8FR?_F~>QPj6P$Q_ACYU85svcZps@(>|*rUqi?xFC1H`$^eHj2HEiy8 zE~;!Ae!f`xg}R3YJZcw)*r)J3JlRto*v>UoyX*|&sjN3 z!7{l}-uc|+sLemD9V$0oYIdBXf2Y(vv2j|=KHW#l?wouz-9ov1Vy?1+U&A+nX`G6S2Nyki4~a z%ZCpc@oVKpwjE!8wES4`!-qHjZLxQ1NV;*j_GZq``Cp8G{`r@)`N#iT`h1MxI+59Z z4}q~NQsNp>;#gXekzd5%m{OFPn5W>Fo0M9VUY8#p1(X*B$vfxg=BDPApepFk^f&-i zpbAoul30>zm0Xkxq!^4042^UR40R1nLk!KV3{9*|%(M**tqcsV%$5Cyq9HdwB{QuO Ww}zz$mU;m-FnGH9xvX>$GMAe>K{W#i-kN2xinB@_8tMMPy|Wo7P&loSLCOymxEx$J=& z$G--pS4&8*0ilUkeV?=jZxu1vvb2g zezV3T1Lfn>j&673IC*E%Z;^?rVj`yOO6*6QqNg*?+}C`vNzrnl4)gQPUm8#7lqA-P zsx0GWTGwBH_>^njTdh8`gYPO%luXxo>HT@Tm947ZCkKz626z73lvg@`)}3FZ#CTtF zd-3%0kj?R;QBADn{Cf@V7dBQJU1{ek`IUNdSqIyeU-7$aL=N71cq%LU{N#PpFRyD? z-7W4?VYwzu{Ive@2&o0%xfE>VOMTP7w1K1iJZ;q0*-MFufm2KybnliwU@NjUPNt^U@sg0{8|Ur#hfX7ahs zU`-7&V3}DJ@RR$(6!9CjDm*#2Sk5IHX&?XBd|Y9MJ@Y%qm2!XnU*noApm9?0zu#+v zTLmZM?=H1&TpXly9~i?TC9V-Aj-@3T`9%zlDMguyc?yoXNvTEYb@|~@KzUJ+ymNkT zZfaf$s)GJZj{`sjsvrd^i6yC4$wjF^iowXh&`8(7P}k5j#L&#j(8S8bOxwWF%D~{t hT-k3Z8glbfGSez?Ygl?GAr_~fUb6K&Y#_q$Ks@zB(-UTcA6!$JQW+k$${h?A6?ip=*IY-1U7>^5u(;Rb zgp#|1YHCN2rZSIXq?Lo5XNGUGUI1tR{Co57887&lkiC#k@M^=VRZ#~g&2$i`3@uFO zU7E_&Vo|WdYLV0oM#jt_i+{_mOk-qhIpyiFUAMpSdn5DP-Z-NT{~N?*`_7vNY-pX+ zY0PWQ+w<*c1oIZbpdC^|_0b8(g}*T$TX<{j_XT^sYl`bl&%a99KEo)&?6u&f|6X^0ebk-I zG5_qGM=AOi1+Uv*=bYL-$!Xb(a>2TLjq1-IrhfeR#jf+mwVKoadGD`mD0$O&V(mL% z0E(2jMwB>~mSp4?F*v3aWhUk+IOZm$7NytaherYBMM3h;`MJ5Nc_pX{`ZGNa02Qc$ z6r?1Uq*^5xr2;7iBLhPtT?0d1L(>pLGb=+AD-$zq14AnVgDZ1ozoBTz%}>cptHiBg T>4BwQKn)C@u6{1-oD!M#-j}2`ab_iMdsPVjz zaS~@VKg_cAU02(&o?t_Lk&AP0ir5{h)~^q`k!O1IS-1WQVJ>b_;S6O-K?5E}hC+@l z8O$k)BAxtP9?JYNoCn&|c+WITNwV7nbcix?iZRJdv2Xar>v7ABUA_6_oR4}Fct0@u zt~siq#3(6~FPKrV&0A=7;0lI2FEw|B{^7J!{+c~Q=F77)j7_^kYXw>l)J#w;;9*K= zV_GDq5Gx>U#r|lToz=XEUoTRUDm~TCuGzw9Bb2dg$C~f^YYx{~#=O|#<6dlN>&qRn z@aU5O?po8`Gv8)!e_Zr_MU-vl@7KGtsy+p*E4K+>E&fsOp3IGzs~5(rTc0jAmg&#e z-*$SQ-hXC025nxQnQ6Os$pXVvq{KC%#Idv_Bfp5jF{LOoF;BrUHz~C!y)HjI3MelM zl6TI}%}vcKK~>P7>2Uz4Koz7QC9x#cD!C{XNHG{07#iss80s3Dh8UVz8Jbv`m}wgr mS{WEznJfDZMMG|WN@iLmZVgKhEcF6vVDNPHb6Mw<&;$VFaKQ2a diff --git a/companion/src/images/library/10055.png b/companion/src/images/library/10055.png deleted file mode 100644 index 52ae8827b98a8ab2c6e3918ea79e69ee10a36db1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 659 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxQ#)Wanh!}Jq!$t zi#%N%Lo808y=?1s#6g7p!+#4`mm?8edb7{+isk4Wi8;ErAtF*EN2#gz_y>k0)ipV0 zyBEnhbuS6x$vUEzG2`RjlyGCmBbQ7X<&EEK>tERXd_mPi?gXcc?fDLS7|%Ck?BvXd zQ8Z{~6Y!l7DJ!C&w4P0bX@&EF2UoboEEDRPTVF^AFuYaMVZ5fl;2%?W+AYg7(ygM! z5i|K%1kDnk3z=;6*z>ZQC8Aw4`bCqJ*B8~VS6X}4BydZ;n0ld+V@;ug##HZw*AeOy zxSVdXHZK-tdKIVfocoxKoTs`KOYRP@kOL1@m_rXPuv~a_LZnTQW9gX#Gd~DQ*)p^C zel=}gulYjJ`Ow?x2ENv;>zQV+U-8QNY2MB5*(VpZtP*F_ikTMQwwrf_0h4;tgG!f( zV57x_7pE2_J@xTkp&!d;Z#1n>!EBmd`?;Q_+6#(T^Lf2El-Ka7$JRFIpXx5Q$?f-i zZ+(iko?Niw{-*_pP4?XIJN%`j#4c-j$)l9g@(({m?#+wkZ>ui1n_nSkv#&+|p>?BN zV9%GYNe>ssf9dO6*Z2Id{H8zrKUi#h_i9g^-LMQ8g(4-c5haeLB^mie42~&9nTdG{ zj=4#xMd@|<;ZZ<&QINcIer|4RUJ0s#{!EVpKn1EG1u2OosaDBFsX&Us$iUD@*T7KM z&@{x*%*xQj%EV0Dz|hLT;L2RtZzvja^HVa@DsgLAdSIy+Py>UftDnm{r-UW|A7%d- diff --git a/companion/src/images/library/10056.png b/companion/src/images/library/10056.png deleted file mode 100644 index 7c9be6730a951510ac677606cdb191d40bc0ba49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxQ#)Wanh!}Jq!$t zPM$7~Ar_~fUf$?;*g$~o!TqlZY%P*AXFcQ9+GwEgN$Z1BZ(#fx*3Rc1YGK|wk~;F` zeo=3DI_Bz4v^)BIw|)49pWm(Q3mC5m@W0TOkh>WAApd&9Rl&AhE1IL4`BYULey(HC zW1RAUW!9!dQ^s%XJB}=D;>fvPz&s;f;VWut5#vBzVH#8SLdm<8l)hI$Lqs1@aq+4T~8{53NrO%kuJKaA^ zTes=nT9P)QD5_z%fWpoT94yKcwcb7EIXipLp^MxF7aQ$Zsva$JZwx$kenZS|2lM8s z%9;QCf@h~^Hup(Bi)7hRICp=K&+8qAZO6DhPE&Dq~%_`rDTs|E6ECZ_U4T{Aw!8@84g6K`c_@8d2g{T9T1p#Ne1x zl$n^P;Fz0~T9jUwA07pi7X`^X=jZ08=9Qo-=+E>x092p~Qjn5Zl4_M)lnSI6j0_Bo zbPWu34NXG~&8!SftW3zQ{H81^|ocwnw($&h&JV6K|F*N2^&hhqhF zm}V4gJ}>w`!brTJ*|%o1zqW<40MDP*SMMB=sp#0B>coBLS6%hlET5+ZRkI9M+CTlZ z_SlRC{ss++e+`pXz6>y0ppYyfW!1HNnX-1)g;NXiFDR`_YujeFMn|^oL z2hGwwsQTfk^pW@H`5vk=zGY?1ZLNK8P#pbsmww#kPv!lWD$NZV%?>Ked{9mn9~x-JSnI zAWQN0!}p3Al-cgzw7=ZdDzPKj>U!LhUt9gDmrz~iT%)NXhbz`j zmU35kq475R;7vD!&B0ZZ{o-TAt#$=<-AWTKdAc x7@Aobnpl~bX&V??85mrdEBg&aLvDUbW?Cg~4NDI!^#W>O@O1TaS?83{1OTIQUPAx? diff --git a/companion/src/images/library/10059.png b/companion/src/images/library/10059.png deleted file mode 100644 index 3d5e9bfc037814bf9ed05988adc097b2e45b4ebb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxPeS=2F54mYxgrS zFrM>taSX9I-FkUr-faT`h6}<-x@hA=7Fm%?jIR|RyKLRi zaQf_+`>@re|6HN7eIs7ldcGrO$&bG~KWE7H#Y zI?R!DG@zKh!hELfGQ&?*x{vtmY|jZlIlG6|Jo~Iqzp!MuoCy2vO1lGB92|d7X7_QF zu;ANZR*?VTL1L!DWOr7%2gi6$_j4RN9CS(4UeSPGL;9E>tIFMNf?j7o1+x{hZ)}XM zW8$B(c;~WwE`?VQ8bVG^uVT3TOx}sv;DCS7YC)UJ`a#ZpEs^fd7|G?3|+t_P4>tpY{tNwA_>E_}0VsTX&*TeSmeqwrKFXSZTwC*v3LAaub zr(mqpjEP5GBTTvt?wD2bOvPH86O(`njxgN@xNAlV=dR diff --git a/companion/src/images/library/10060.png b/companion/src/images/library/10060.png deleted file mode 100644 index 2837c53984c42c26952edd24cd4c035656ad3bf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1567 zcmZ{kdpy&77{|Y}8P-g#%c#r}MQgQnkV|P}bEh3Gx#cqEa#-6-Ki5u-5Su1C!spXc*>p3nR9?~}@OvQ|ZHL;(O)ZEfhzau>)& zRhAF1&`7u}HwCu6H65&+PVcxU-&FWEZpQ&Y&HfV1qRb#007Zf=oyH0pZgdmXju4a+ zmsh-Z9V_04Y#FXy$hZ~A3rRya3tD=!v(iQkd8yE?lxqcz=G7ry=}h;O&-%eG>T`Nm zMxK00|2UOE*skPL`yhk1iU#9H^*f6C0MmB&wl(=_Ass5gJ>Oa|vSdb;_BWOm#0)B2 zI02(2a=YG6;foP%K#wAj;Yaq>Ej>gY!LYPj?z~LwPbLhakVB4fb{6*JXp=lPp-HOB zY@f>n(xE7XN$nWrY~A;PoHMo?Zii@$g+gd%ys{tql)ZvykOqwLz`TB$!h0Du0t99N zO)z>5*%)ZM>6&w*wbaDqU0L&B^x3ZI5AsK2noTDUH3OS-3F4$>g2JB}y{mM(4EfLTBT>paZ}62~2EA^@vA0 zuU$_L$_v{~YF%v%ue#{5_Y2z!T}~_wv8`Y)4wT?-P6PTzs&d%Fr4|;(qW;QU@Vb%~ zmsRQ!S1!OXNMlv!l>JIYqgs-Zx==@9$0zr)7+}Z8*FT%n%sy0{#c=$#kDz`jlZEhy z!lhpiqoqS%6cO^vTdd_jF2bzh1Wp~*f z)cH}8R*s22&tJYQH3Dz!`YU_gpRQIO_GDR1878>1Ld&@!>VDHikE5$l{?7%7kM(+t zcjeqF_9&q%{ec6w;HEx#E3w;%D}pBZ2`X?x5)kKGf~K}ps@*>NWnSkwr1`5Oz4>F7vR(!K(X{g zfu*yHJ)SjLnL`b=&k^c+U4oFdHjK#4SY# z$?y2ICB}wQPkV<6N>AXWlRc65th#S8LM9_^LjiKAo6hlkMVDRWUr*{H^k#SAA^|l? zSco)(V;Hwjw$@BsgPAH7DawizVLNZ@62Wx(xHA?r_nZ`gd-J2?=K+1;9ehJZvv~LL zXPc^zlkG~VhZmC(-k-M)H*`0g1HU$CxQXl&U>!`*3bPSH!gpm>mY_JL<@(4cwvC% z9~SI;j6mbEIbngZyd&=NeEqN7lE>w8jzPZz>A^NqIiULs@b`r{rhZ`@xq&@o${rG# yLZTS5C`P6f15*PdBAH@JCifR;e*LY$<@pB(ME`$5B9++53&57)M6a;$N%#-Cd$NQ8 diff --git a/companion/src/images/library/10061.png b/companion/src/images/library/10061.png deleted file mode 100644 index 2aec8a70335e5e7cd88e722382763eb8f21866a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 732 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn z*PbqpAr_}oFP+W1Vj#fqz;myX$C_)`ZP&bVR^9RJ2J@=$N45cuHV#^Px~mEVI-WMn zG8W2;W0~k6cw6`juZQQ+Z(+?<9xKe7AOG!?t?~Sld2HTB_JWP`^!9Uf`|rKZDEg26 zP^(dj-iZmjCa^Ezp2r<&uEf>x!p(ratU3Bhn-ve+5w@+eUu@aiZr5&D_{Lt|N`c*? zBxp(hB%e1Ti+UqIoIQSw5w&-1>DZjx&A`a|n4~q`j2wI&lg+%McOddXC7So&8_rl^5n?BJaS!{F%!5h8TP6hmogl$;bNV(EH;Ib7Oj18iCANvm75i*h!9Sr^tibo#hr%=GUmQIqb7?-4m;e5p zBSrWBytp)*`9uULKNd9NzNpH13*{sVv2 zRlc4ZI-+xcX+fmKHKN3^v?L?Hh`}+XC^Ion!7(=}wJ5zVKRgO3FA9=(&d<$F%_~7w z(4XmX0H{C}q#z}+B-JXpC>2OC7#SEE=^7a78k&X}npqi|Seck<8yH#{7+jev`wc}y cZhlH;S|x4`OAjpd0%~CJboFyt=akR{00!JG%m4rY diff --git a/companion/src/images/library/10062.png b/companion/src/images/library/10062.png deleted file mode 100644 index 810efb9a9e55a84a0da15a039625165a9ae38a82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn zX`U{QAr`04Ub6Q->>$GMVYPUV^T~&cWWDkQ<}k-b>4X#%e3AC}`xWplV}uXu`6ZbrRynxfC*5#9do`M~g(Ysq z^z#ccf69Jjja-tl&Ro;t@~Xn6k7e0fKCs-`b-7pR3(KC|pbnc#F-( z^76gM$)&nFzbrM$-9y|ewIxS#JxT*YTZ?CRdjes>3xnpn>$}i z``Xw!yt4Zz{fA+rM|668z^Wg>XcH-MjVN&}Ey>6)VsK0;%1q2taLi3gElRJ;503)M zi-P2x^K)}k^GZ+^^k;e;04h)gDM(2yNwrEYN(E93Mh1pPx(0^2hNdBgW>$tKRwicJ o28LD!23O|FenZiao1c=IR*74~(gRDqfEpM)UHx3vIVCg!0GtZ^CIA2c diff --git a/companion/src/images/library/10063.png b/companion/src/images/library/10063.png deleted file mode 100644 index 2cd293505713c9bbff457802efbab26b4e094479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 543 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hp6 zJx>?M5R21yFWLIBD2lLuuwS?!#oO2C1IM%ZzDXo)eLCsJhC-wB>}Mu4 zn%?p@^r@4q_-yA;TD#Ud@$P!%CH9K91eY=HkvniwPHaIti;t|!fszM|R~wmA*cpz< zS)34CmiM_oV6$UGqnG5e2JPBIj~R``K2$8^x47ddV!-FmbAYi%k9oh5#yVe}1y?6I z1}_mUX}+*;15eEa=Z`@@ttKXli55A`R6NPGuW_A#RzS}-rjJYWS$8DFG$`jLN~$={ z(^^sFQn>t_iF}rxr-4gxnW}i58jJ7AxPVPx|0GLxNEF#Jz4L6jv$R`VRJ%3Bqb&Z( z3QeE)wicV)mw3LuUK^iMWp`^|VE?=8_wJSaFSFZoXytsvjbDt-@-JUtE8o4@QNn%q z+IrsmyBryxxHoS63=B?@64!_l$I_CF{2~U&l%mYUJO#(xq|~DHy8Q4cpu8wZ-Z?)v zH#M&WRY8BI#{r-MRgi*|#FA92j@=Ix`|7%Ci|iZ{Yjw&FCDrFQ|J9$dh&Pg3>uOWb5d-$5 z4Gvb2)y>4cAAC zx`k&La+=RuJ_u(!xz$i^${g!}lnlmIjCX4S4L&&X9rfPzT8MqKN&~lsOoZTqEC<#L zj3;I&F??LQm0eFle1ZSz4LnT>^O!yAU5b_;Gr7&T^G3_TC66yXKjhE7_Jo-5j~wlP zhU_jp>*S=Wr(|4T>iJUp8TZMA?yE}Du2$8Z3w^>5Y6WF&xh0isnzp@2xAX zueHC>r(6Q&UpEF)B-lM>F{V!W7LlE5J>z1JzAeO;f` z713k;&+ji0R9_JMNwco5o;Bvr1O5+LKU-rCsoC?hmc6{&c%r}~;fUQ~L&x=}1ZOW; z=@`4`*k&#}7U$E;eImOo8~Y-+2=gd<=&KvZ_^$}x)Re6u?htpd`PVnzeb=+4b!HN z>pxn5=MV)3y-0~`M2TZ*Nk)DVgJVijW@4U#V{TGvQF>i|coa}x6eRDQpPQSSSAwdb zKhxs?P=P8)K}upts#S7PDv)9@GB7mKH89jQGz~E{vobWXGBMLOFtjo-xH4Dv8;XY9 b{FKbJO57Tj9$4xH)WG2B>gTe~DWM4f9QEMf diff --git a/companion/src/images/library/10066.png b/companion/src/images/library/10066.png deleted file mode 100644 index db4917113f965ac24f3cfc922f79c41d209bcedf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 658 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn zg`O^sAr_~XUOt$`WGKLJAu>#>^-$bv&A%-9drkj}EVO?R=r6rLp?<*yf5Ul80zL@e z2`lKo`{-b-N4b^p>{!!wr_2c&{V7J1dm8RqY>Q85H|XBX{ODBk&ZfdCZw2Pt9$;XQ zn6-uV>7^Y>4zh}DW=^xBLDZ)i1#)~6 zLgz{hSWj&c>DVb|H7#o+567p8i7DqU%L&b#`)=V{o>2a}6h#q58K)J_2jU+{IGqhH zJyr6u=1}dj-k4vznvd;26wZFXLtkhKGuO_EMZqtEmKjxKbF8oxk-R-ksq%!Q?33fy znj3dadwy@rg@FDutai}_oX?cwri;m$-MI6?n9sH#OiVV{W}d?Ft_S~EM8m%LeB_i7 zk16}`j8U22ELCFpj;5j|y`f>BdGBPdQrv&-!-_RY488IJdtS9$KI_Wsm*OjzRf*Xb z7;)g=t@Rbtmqj10I}*SZ(Y8qJLZ8(HvosdLSXa&o94ai_!Nsvt(q@{h%0IpE&g9GD ze=oXJR^2rC!oQ$tKRwicJ28LD!23O|FenZiao1c=IR*74~(gRDqfEpM)UHx3vIVCg!04sw5 AUH||9 diff --git a/companion/src/images/library/10067.png b/companion/src/images/library/10067.png deleted file mode 100644 index f188c03a8f05ba1372ac8c7b8cdbecd783cb6aa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hp6 zX-^l&5R21$FB#??HsE0mV3o7^#dbEZWZ65$7l)jW%PEEnUQk@zA0WE7fm`28al%ra znTv!zS)wpr(6uu(~|WaTXBh|XnfG8bqXxrTNG4fYFh)Uzs=>pSQ_2JdBE(#=z~u%96b=eF4)phV?Ta_#T|JKwaR&feU|m zEBJ5A2%EO9HF=!7bj7A4Yrm-3E$3b3s93v?>kLoK_w5J7*LO45zH8v#BT)V&)@{xu zH%sfQo_8nsCFwuZtF)j0t?ogw9p|OXMI0~PA1v;v_^`3Y<`2^&qh&?T?7Hm0uoEe9 zjVN&}Ey>6)VsK0;%1q2taLi3gElRJ;503)Mi-P2x^K)}k^GZ+^^k;e;04h)gDM(2y zNwrEYN(E93Mh1pPx(0^2hNdBgW>$tKRwicJ28LD!23O|FenZiao1c=IR*74~(gRDq QfEpM)UHx3vIVCg!02UR*t^fc4 diff --git a/companion/src/images/library/10068.png b/companion/src/images/library/10068.png deleted file mode 100644 index b70eb70d785190d60751b33e670950421fcc538f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxRpVe@%FN{ZVU{J z_MR?|Ar`04Ub4lhX9oqVAoz^{Co4js;lJoAXZeo(5 zU#3^xSk}Ymx}1$qseWR{ES1FX3%?YzoMW|NQ0Lso9K!hL>d}ewA9$WtmU*yI>_OCn zc`P^B43@B5VVuRwbJ(Mumn|-O5$}qwg;$x(7;mw5JmYxIq8u1|<*?w(O%BaB6yn~A zC%lsVVpw)=OW#cs?jFV9_@m1MZ=Km4`+7CcyabaqPV*05l_=dYL-|AfH0F;=&Jj$( zS{@9Cy&v>8ZzI~Y5s(G;3!{d;4n~*}Egxmz} z`zaD%WfCJ4_Z__|ytb2dMh{EfgFEXDjtXvB@+U}Po<*CphLcv}8nyXR4CRbFe70}p zl{J45`{i28xmvD*Oc&Sh%kBBj*th3^Bq*x%nxXX_dG&EIqK)3#fs?)78&qol`;+00l|V AYXATM diff --git a/companion/src/images/library/10069.png b/companion/src/images/library/10069.png deleted file mode 100644 index 3eb68b5b283825f10f3b7b64e41e776f379c1c0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqn zpPnv`Ar_}wFB#_DHV|P;;F7Z``7nWbhr7lF#coD9#p5q-T-3ewYpb_a$%_el?cCTG zFIZN^xr&*EPq@OP;lL!Og-J0J|NPdtx#|f+FPrC&1@8O42Q%${{b*ffm+gzQ!4FO` z->_+V#c-*M?|^JW`6~Wrf@i)2JFNdXZ*qgU64xT84Al>u=iI{&d-+Osw5VGAdsVhz zAM-WmH9J`y{#i}uUQi(Lm_hDmbj$}KQ5Mq#zs#fZVgjr56gSV!Px#2Hl)2!HyC#>O z@G`d0dq*{eRx4~XRZ-oxTxGT9cDiGNaMU1T0^KA%-FVTJmEsh3yrWpJKJuDg}q%x2NZ694n*QC(9( zy`7nP0-Y0iBTh=%s*9-IY^{0AY1O~xq}{t9`LhS_c08`A=lQweow@w>=bP4s%N}}n zP`LfTS(&Zs=FenQwiPG37usz+pq-c3GylpV_P(dL)+u&5sXgZrK6l6c{)$%RlcE7Z zBFZ!S*=*j+nDeY^Ej^Za?ZE6-q2ESFE->00P-lGOa4a!e;ggzt0J~lw-~T_qU;cPOoHsTY~&FAZIP!RCISzdoh1*Qy<64!_l$I_CF{2~U&l%mYUJO#(xq|~DHy8Q4c zpu8wZ-Z?)vH#M&WRY8BI#{r-MRgi*|#FA92KidPDH0 z8wnqbzi_^qaPa0Qj-5Z+dICQPthD@c_U_6_@Ahnws_WoyfA`&=<^PqLd2tT)j$wul z65^tf4?5%Cq+1#t5a8r~leNv^+`ERW3;c9=j&Cl0GG8t*xGlTMM&z?}OpeMF7B2qj z<}>nH)C%S|%J}K8HwgEv*0rC}^WHFc4|AFAwH*QPqbIQY+w07!VK~LMFT~#T+rC@c zR}LKBFe_T&osqa)-B}a2BRR{=1a2rsXVj=y*L-TX`Eb;5$)=;e+rO;UjsF#}Co#4; z=GLZ))6Oe?p5x>>RV#QfYs#^JA7X3?WsEM7Q`kkEc@8f4$D1TR?LVh0|8`%wvVF2U zjDI#~K0N5YO|N>wI_K9)OrJmQXkOcX@ugamk?m#OkayFZQf*p(rL=l-vz5K|el;vt~5Ac6KImfl(_w;ptmO1ab)%tv0vhV3H z$^6;(TNr9iUn{qLF|{W#`o{m4Ws(gGSx#s2PrW^D>5GF?PpdNBICSE^;*zon2R8&R zKdI0r_>tp{yz-p=OjRbnzo)QGlK{r8NQrAiiDPL=Mt%{4V@gqGVxEFyZc=JddR=~a z6i{9iB=4M`o12RdP`(kYX@0Ff`INFw`|P4KXycGBmL= qG1E3Mv@$TbGFSE+iiX_$l+3hB+!~f1Sn37Tz~JfX=d#Wzp$PzAG9nBB diff --git a/companion/src/images/library/10072.png b/companion/src/images/library/10072.png deleted file mode 100644 index 82189cd46fe5ad407574669a84bdd62bc88c877a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 705 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxPeS=2F54mYxgrS zFkbLjS}v4Teh0nK3GfeFEi-O6lj5o-maiKg4)*<&@Ja9=R$- zH*in2YPyzmFo-9jgD1RZX5=jU)ml0nFE4i)|4#GV5H7s*E&B!O6|353ggD0~JejS= z)|%U@<;EhhsNu(Sox_^n$_`Xr@_ET3!rpeC-9+SJYu18$3#;yEXRtmA$@n#M!uC7t zGo0m$?>v0Q8S(06^v%b{VcHL-e~YcS@}7N%;EvxMQ^e-II8yL+s`rb|1Nm2&o_IfJ zJj}&VcDi$Qzax>q|<=^RYqOwBvhL7dORm=jelU}ZT%{(jGJb6QN(28k%N1p7pxDa>H zQsqDAPlnsu_~+&GZ&Eww!#;Cw_3R=BRnFWZ_A|@nZAHY=zE`uK`k?rB!6dDneSZv1 z%CpZ{8$56>mrgchNH6vN;4TpV(z`;|#O8HWedapr36pz2-D|PE@$jD^Ki`9`@3!Ap zn-ccC;Eiy$vNu0-P7a6ihKadl%uBMLI!*lidyB7ILPl4Lp@ZsjRZg}EZ+~$qYb0Fx zEa4>gB;!WLp_fNmC4cgLkQVOv&phR3__tne=K^3Xi5D?<}26EkfCLn{M=D|2PPp=ij>PsvQH#I0fJfu&wR4Gf;HelF{r5}E*Nn;Ito diff --git a/companion/src/images/library/10073.png b/companion/src/images/library/10073.png deleted file mode 100644 index 37f11ea34e3931858ae10365cd06048eef025e41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxPeS=2F54mYxgrS zFuwJ4aSX9IU3+O`*KG#@h6{lubJp#cGwGbb!@sP{ixd4)PdyR7bC-Qdq2eOmrXO5_ z{~iBmXO}EE_CTH^v9){3#6soCu9Gijg=?D!ZZzn>IrnBHBcHr~W@IySg4C>=$zO`D zJW!s--lS1gxo8LLsdN7hJe{Im&8(Tm-jqJIULk;CW2?M8r__RAZmY+&^L(6{RzBQq zH)W%olTC4KSo4d9Z?S$l_e%~~2gn^PvuB#0FnKzg#6O+|mA_@CI=kg1NX_Pv6M8fG zam!0B9>q87?{C=Ao_~hn>niKNsSbiyWVf(=xagFVuzEM2tjxB%HcaeG+2liS9sVUz zuFS%|i9JnmvT#lui5NKZ0y?)t65``15dtcU>1=O`BeOJL00qDn(3Acq@*RQ_-3i}q%!bb znX^<$hIzyOCQf$UBk3C_{HXrnuV~x#(@2-?LFvKp%_hl`W7{<(sfe z;PO?`ia%wRZ68D%Bpm-b9B4MYb0PRI|Ew49q(Vdl?^tC#zrNwv&z1+r4o$o_HED-* z+Zo%H!aQ@d`MjH|xp#Y&NGoho@UzvinO!(hYRcX@5m#g1@G6K))tGMKTg}HL`iI$` zb>aTZ0Ebt=Bp_1a8d2g{T9T1p#Ne1xl$n^P;Fz0~T9jUwA07pi7X`^X=jZ08=9Qo- z=+E>x092p~Qjn5Zl4_M)lnSI6j0_BobPWu34NXG~&8!SftW3e5 zkykY_skp-0HLZ!gKWw3*k<{$2{=S0 zbjV&fp2I%(NNRI0duJqP^^r|Sm>02n$Xnp$e|P0A#-ndlxE>0ZCM=#VAY8&+@aJg4_71+pqvcKhKXi6|+2W+SL3oF# z?)T*dEc~jDRW12)$u?pIStN$g~Az7Ye7dbJe_2v^{t!eJ+c}^mTGN2W~m{ zgk8$z{N($}i-T{4oX?YI9CI49u63O0+0ZSzA#B$yxt6AhTh1KFZraPto4@2K+Yjbl z`%K=yShdOb`iItEZgZ0@uWi3^$~wa0L-V`%+bp+Mu%EuTMSc-OY}4vpQ4g=n8600^ z6xzuwa)Rq~q3nWJ5qbC07+>_vSLvGhBbXxe{&vVUX#7-N`)YUCU>p<{sxcO^XC*RSr?pNuunPQjm)|g zq5qr9YKl3_Y}9t}UGUXYJbtp{!K!xNuT!5D7>h)@9@DpQ4Az_>c<0-ORa>|l3i*G% z7hD#&KPlhl#=oMfxZRZ|4Ku4c-cGPOBWrN_ALHcv3qnhtKV?pzhK{L^F$sLO|?;K_3SbPgOcJ-vRLSaG9Y!89e!4n^-<;8s9 zkaM_X=F(r={LU-$@s+h*Ig+2ZUtL#sS>0f|XPxoqv(snVAAbLVWmj|QGMo3!4>`S= zO^+^WYKrOTYgsVk`r^Zj3MZnoxbhkjsEW>FD zrr9Uj)~2@^P1^0t)N^~$uIsJeq-)g6UH>-NOgM5o?QdVx=bb^jl`d%5t}{LToh9m6 z)GC`>&Hc6SmRu9I{So!VujatJ#&X4dd5>BC#D1(w77i#b=wIqtmnRT+rB0zhZ_kXk zLKy}3Z++(6Qgq2GWD$EE-_Gg+A$E4l2T{!lHx)U(wk`BaP-igpciOINv8RyfV|Jgg z)alcyjNOMawK_OkodTS^KMA`#GVgCuvWN{zI&w+AGUp6)OlkA zpUvqn${OFBo9zzRH_K;6hc~4?Kl2?Jbs{CM5haeLB^mie42~&9nTdG{j=4#xMd@|< z;ZZ<&QINcIer|4RUJ0s#{!EVpKn1EG1u2OosaDBFsX&Us$iUD@*T7KM&@{x*%*xQj r%EV0Dz|hLT;L2RtZzvja^HVa@DsgLAdSIy+Py>UftDnm{r-UW|8Il7u diff --git a/companion/src/images/library/10076.png b/companion/src/images/library/10076.png deleted file mode 100644 index 30bd5f62f318a98fd66d40687b57fbe949b79c95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 704 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxPeS=2F54mYxgrS zFrN2xaSX9IoqEYWTf|X>;e)u6N6ghf=SPoYFpbrm0n3 zW~bSN6SY%v6ef6`yY$XXZc}JNzer!oo#%VZXYamQ+THr|)X1dBW9ySN5w?QeqVh*Vx&V0vtL=PM`gE)L#)l1$8+P;9%$T=op>$=%0zJd0 zBK&3Evht1`PV(hW2aI*)pDRY}l{Y-{y&&Z{&ur5f`zsDKAGB4NXa3Odtki}bvwb$Z zEB=uak2G&l+JANu!?Vvt`x#vu@L)E^mn;Fp@<|Tq8;xOG`5Hix?bJiZT=P6dZGt zQj5~-^24Km@}eMl=ltB<)VvZ@1^t;G2Y?DxK?+h5OH!?pi&B9UgOP!uk*KN`d{N=it z%fM;1Kz7EbT=7HJKa3BsHz@A>&%hnP{>^&<*NuZEY?lmU>>ReRGepSs%Q?-<-KYKG zW`;th!s@y!3^iP8R~}^Ax-y@r-ZD)~;NHW;=>AmqPr7*xFC^F&u$k|xVaeJ1PkVxh zj?VUXm$db@kFasF{P`+ssI7dHEoX^r2uJanl~)|+otElb{EyX!ag&Q~Qt|pD-+?|C zDRGS`aV#y#$S-1WOexAt%u{g8O-e0FugedQ0?Lbm^MPz5PS zNi0dVN-jzTQVd20hDN#uhPsBPA%S>$Ho45`qK8r)!4XYY4n8aYKIP_@oaK8@GrKwaD}nw zLnn7f-VA1=LpiM5JH5Sl4K`l)eI4y%9ig^j9iw<;siAmCE`zac>^6l9FM|Yb@^t-O zkaJkPj#Fd%1Lmy__t>=lbzxyj&booZSsQ`ntecZ+wz$g^DauUDQ*g{p zN-avS%MXtN%8P>Jo%3^ZQ}aqt74&C%8~`d%1t~~LEJ?LWE=mPb3`PcqM!E)ux`w79 xhGtfVCRQe9+6IPJ1_oE=%6>!9kei>9nO2Eg!_oswy?`1RJYD@<);T3K0RSP!0J8u9 diff --git a/companion/src/images/library/10079.png b/companion/src/images/library/10079.png deleted file mode 100644 index 387dc81beb155a658bd33ed44091cd043c239bbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxPeS=2F54mYxgrS zFeZAsIEGl9ZoOjb$D%00{=wbAJGpGn!8d}>*osBWKQc{@h%h>qY|Va^ag5 zjp>hrHrV`}k;-N=v8CnDA!Ubu3?ZgJShrd7?^k0mJ9zN>c8*o&8EP5kia9B<`!52}%-t}9(Pl@OGs{YS%i#0YS%sXZnrAaI*$C-5 zaNp8R;Q8>XalT_d>)r|vYhDA6UuPIN`HVX_ESx7lxb@_*dWKPlAltixj?xdCRx`Bi ze#sTiIpJo6($`brr9CFbk_C?)4bM1Oozr083b>u;T(?lNjU!xDqk(0H!#u_|(G|Ye zbsZYo7EZ2We6diUu{x@W({NT}bGBDTa*NR&-<5|si}ZY%W*Wa%64AUDX7DOt(?5%6 z1?(2G=?ggS|DMhC=GR|M=N*?PM>niI=yv12Siqk3{~5C{m}<;l!1YTih4*T3_!_3u z|9|jg{a|ERRKl}hje-C$*hNZQBT5`gOEU6{7#vfIG86L@9CMRWi_+`z!=r%mq9A$a z{M_8syb@Fe{h1yIfC^MW3Q`hFQmvAUQh^kMk%6I+u7RPhp=pSrnU$f5m5G_QfuWUw j!IinP-%vE<=BH$)RpQpL^uSUtpaup{S3j3^P6T)VCV?1@$maS6I=;%^d&So)DFkpu{8w2x$&q-a&0{N#lUsfz&;J@Tt z%dkT2z;f4#49tw7f!!=i8jCnK9TAz*8^|wGV%BoURpU^u$6OwP;*~a63^(68sBrYN zpvj?Wb82di7exQ~`HoSxCU-sig}Hn7-zb{9_3f>DFZ;h0oWJ$W@#}_N(fT(cpC?o& zKX_Rqudt=s>b$tm(t?9>>C8KpoW8l-XF-g9diBI_H}un`^MphaO3U}&vMHXt;P8U) zIa?X|N?GPwO4PoZ)3adl|35s(K5(}!^6d;woiz~{Ya%7C5haeLB^mie42~&9nTdG{ zj=4#xMd@|<;ZZ<&QINcIer|4RUJ0s#{!EVpKn1EG1u2OosaDBFsX&Us$iUD@*T7KM z&@{x*%*xQj%EV0Dz|hLT;L2RtZzvja^HVa@DsgLAdSIy+Py>UftDnm{r-UW|Qx*E} diff --git a/companion/src/images/library/10081.png b/companion/src/images/library/10081.png deleted file mode 100644 index 66019bb708b28cfb4603f73abcf49f5a6a334f42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hp6 z2~QWt5R21yCmH4)Q4nz5@A~jk?zYbULp!$}3gVicxq0gPrY)}P8n=oUSVcSeq_M5v zvY~Tzh@%s8|3l+h{41n>a0>+Vi0xxxbLMqhB)XyI_F~0d59em=WUfnGckp_@0#l!3 z!%fD{SsCTK*;?beW#%+&T=S>xyi|;L!PA|o=cS%rG~iI$B&DykhfVjA?0rr5^A1v?iQ(^F z9}=E&MPYjLEZut_P2V`~IxDxDTWEpbrWrewbEiLFxNnI}L3w1;&H8{AG3l%Oq)hx?$7kMpadT7G`-1$SuFMHPe#%VUar`NR!0Rv8?#5JPC zv9u&3zlgyxr6@BoPr)%aDYYoQEKdAc7@Aobnpl~bX&V??85mrdEBg&aLvDUbW?Cg~4NDI!^#W>O N@O1TaS?83{1ONl8#q$6F diff --git a/companion/src/images/library/10082.png b/companion/src/images/library/10082.png deleted file mode 100644 index 5ba72eb8f9892b971789f7b68bcf08c985cfc1a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 949 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq*&4&eH|GXHuiJ>Nn{1`8H%0JQ*x8eT9klo~KFyh>nTu$sZZAYL$MSD+10g0sLQ zvY3H^TNs2H8D`CqU|?XX_H=O!u{b?-^2Yqj4kE|)Pgb7erNMUa!osd*s|{kEiq4_p zh9z%K%~;DVBr5DYwK&v8{7O$l%anhd9)B21MOI3ly}`ILula-9x{8fgAIqIjUoK## zGk4AJpVjxP_m%U1Ip6%B@p<=y2~PQpB3pDi(>6=REWK(yx49|&m|ADT1T_~oft3v! zOwFD)CVbjTah-<`%uPKaueq+VELi#ZP9-+A6B!ol3%O?}9ol9$`^g9I1=Vw$cb80e z3}Cw4tWvySyT?MUzZXv^Z;q^Zvr@<6u;RsAryCCa-pTsXZgxq(YU}EyPQlN%{8*jf zKV4KL?@m(Arlpm*>sb4GK^8zPMQy%2gt<=Id#;eucGt2ir>@&Fg;iU|tU%`<{mVC=&YHSGAt`u?-gZYzF_qLa=NSJsM6G3*pK)0-uu8`6NT==N(k<^} zFYNZ#xyj93$#UPf?Q-Z1opj!r=FOd-e$JonEwHoX>ZIVO`|}rMJI>Y%PYL|7tI=94 z=Yl4eZtdGE4KKDn_-%E@HO1NK=j)8_3<2izYcs1~zM7z4CF4G~S4cwg;k5Igg;w*; zyLo9Vhw5B$!|8X{sIQtM`gXorhR&I{5ur=(+bF*fin-tLcSCH`&6@lp7EwHs9Bi#N z%Qwuc>9zgCwqn*g;#gXekzd5%m{OFPn5W>Fo0M9VUY8#p1(X*B z$vfxg=BDPApepFk^f&-ipbAoul30>zm0Xkxq!^4042^UR40R1nLk!KV3{9*|%(M** mtqcsV%$5Cyq9HdwB{QuOw}zz$mU;m-FnGH9xvX1AP6Je{{NS=m!4~#ItwVP54+ad5<>uW5PPGD zpt`11oq}^GrF0#GRD6wW0}`okI!%29%-KTY7H$BXGPaU|8&k(Z0AoZL0c9uv$Sf7O z#Dp4jPg*Egm8;b-`a zlZ(+G0DvU>;BgFuQ=r+Q_&gT~CDaKv2Aobf@9iKN6mV+iz6XJ6JrE)RdNhCt?K7jA zU+0fR0A+vvyAx4$y29-YeB|#E;j?Q2FOj5a`pd6|NXY}A^ZK1GV5?(m6!04gj_V{1 zu>5F(@QViN1VG<13AVH1Xl8T`&zxOFQqw$e_(6ARj^V}VhLQe5$ScZz$2jq$7-%rl zgArV`9%$HLGx@e_pZbl{wS^1*&uFAftN_5NC#V`X0H?jx8~I^nZH98CyZ`_I07*qo IM6N<$f+q{hRsaA1 delta 515 zcmbQpa)4!m1ScZ{5d2!}bZMf#cs--Pr;B5V#p$UR4fC1}MA#mDPtr`;kaUbk@C!$e zq|#1z&-?=?0$AO7dUgs0hAoLvTp?ay&gPOWCH>*Fz*pV#|5(1|OFsw{G>e+kozMDd znd)mvSr!a8>4DZqV9x@^%alucDOVhV(@nwoZ7e${1;HO|ulZPhU1>IbU7jbyw>~$) zTXB{`WJAK=8On`c_!mj)IEn}_nIO5tuRAMadPYLe1*wEb*=+CUCOl7TdUv7oKy!Z_ z%l6YOdmBGhWjz#+zB1v-n&mP#fuSr?;u=xnSXz>iU&P>;Qk0pPr{I{IlvCEuX`n3R0DlSdwa$T$Bo=7>o=IjdTqRbq!5J49%>$Ga!C1#*LE4K0Elk2mOf4?zRY{M|H}D!>++@&T;qK&;)fl?6X%0*felcgRmJ!)Xk_-Mz(R|_u`CyAcYB{Z zE6Dq~RJ;;h`6gN8z#_)DmNT9254SOX>s8rNEBK0SlfK2Fk~E$b!VfD%^CVud@vWWr zB)FfqWuNox=?l(2xbmm1Wqqp8VV0zGo4<24Y0v0d^lko!=f(4y+LQPhtWNXqjCwe~ zaD|3#Y};jVkrv%e+S~lMoz-k^kYV`Dw*K>>CimC`yZzIgvp)yC;k?PQOxUu&x^lZl z7Yon*XUwyff4Y&Q+rDF$e$fs$9+MCG6W>^w1sq!^^M(2N0c)8P*YCYyQQ^LEIY8;Y zYKc^<_^;sDbU%a`p<~J)pP*2e>%l-aMu;bg4IT|9o7nmHRulf`--D9|MJb}@| zX{un!tfOT;e+1vOZaaG6#@0W|RjFYgB^WlZQob?S{&7~pHHZDmN$Qz*O*Ry}9|`-F zefz+(RUJ=Dp3Z4p%CA%q_5P{$HP;DC{+Y8^p7l(-$#!Q_)27MJ%!)2a+|m-aGPvUV zBn%HcS?-m%#xme~8q+QV#t-!e?a%ycc={v$H8U`Yh?KZSlsJ}_WaJkyIHnY3Cgv$P z<|d^UrPt+$M*-zULGsS|xw)x%C8!GeGd&If6{vy~q$HN4S|t~y0x1R~14AQS14CUy y(-1>5D?<}26EkfCLn{M=D|2PPp=ij>PsvQH#I0fJfu&wR4Gf;HelF{r5}E+XPc_;A diff --git a/companion/src/images/library/10085.png b/companion/src/images/library/10085.png index 644b1d0062751eec18790c349a534d09e3dc3af3..073c3197bba48d316f2f26aef88d9e4c3ea925b8 100644 GIT binary patch delta 510 zcmV-8-HxZI=HPa2sgGWQlw_mjCj1ts_i0yX$Lfj@k*!N)EFIC1H4 z<9c98e9u781IyxH8DLipz~`MV`dqIAJrMMEunPRk1J{42U>Io1a$qI+-5bCv0uCRS z{5w6sd`AR}5Dge#cmG+W9V{1rboGy*99TjA8wN3ZU={cnR3htZ0DZ9?g9HTo(W>GP zQ4fM`*Z`0mDpH`erc;1{{&N%>#2DzVm^V+19m=L-=InSv2U-on9s=}O?P>G>yv&l( zo6i%qW3qp2GQu$-L~&bY(fp5O_jt=e+!oG8VBq@DcZXn0Enfdn)jC1I&tcbSFo{1& zfNl2FrY zq-U?}jGT6d`9@Z0zmj-7%WB=F!jn0bt0v4<{J1S*Q+&dYM6nfiJNqs$M|@Ar@S0~2Axo- zf4$y(`Wv>4d%gXa*)qSV$w(YIIh!NLb3@#9h3VVf8>F5vtvj$rLS}Q^nzRKkZ(a^$ znEP^W_ls9f?iaSz+_{8O9U_#dkA zzqbFtoF`S{cv&GZ1{k^`C9V-Aj-@3T`9%zlDMguyc?yoXNvTEYb@|~@KzUJ+ymNkT z?!;vA90pYoFD0=g)hf9t6-Y4{85kPr8W`#tnuZvfSs9vGnV4xC7+M(^T$wBT4X7QV dAvZrIGp!Q0hNTCVdI2>sc)I$ztaD0e0s!gz((?cS diff --git a/companion/src/images/library/10086.png b/companion/src/images/library/10086.png deleted file mode 100644 index 2f16b8b80ccf9b44b580263fa8940ddfe2a01373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 713 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxRpVe@%FN{ZVU{J zH#}V&Lo80WUfP&<+dzQrLA(M}S+bkB#)5s0o3}bMnEGEV>zr%n_)N)QX$9{Eca2@* z6Miu`YDmL#HHa)$O(pDt+wbACDET@#4#J(F%*Ex46G0r~zK<#7~ zpC?cAlPN~t4jlrH6Ru7;!4Nl7aUx^Py}9lQ+`o-(UCM0NSfM!IH6Tzx@WcEM)dEjm zEi0;Gk2^bc<59ktypZjg3|3DjY%@5O)KvY8wOL$XuGyuJU*^0ENNPD#aUfl_Polwj zLDCGac}5tP|MBC4SFwNp{W`yT^UuuKdh5d_KfiC2 zi(fBxnZ3=*ruFpF`nx{2rsk%r`(B=7WBYCY2mZRF46^e=1)G5pFH+(fQQ}xyl96A; z;FwaBnV6^Gn46SZlwOw~9tD&a1<5<-=jNv7m7pr<&-6F|RG2bOvPH86O(`njxg HN@xNA#@i+h diff --git a/companion/src/images/library/10087.png b/companion/src/images/library/10087.png deleted file mode 100644 index dedee12ff0271973aae7509e4d829844dadefc64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxRpVe@%FN{ZVU{J zMV>B>Ar`04UOJt7*no%a!Tk%4?oVGZvEC81a$s0LNzlka;N%Ae*@cTk9K{0tY^OQ! zhcY_q{5|13Yr(!7{~WwjR6qQB^0il6CED?g_JVaSJ60<(tunP)6&n-W7__rtP5agf zqLV&mD{3Fnd&9k8UR>9d1m!MQ+vUp|8aHb>{0pgSSW|D;mhpbVnVS`_-V0dgA2MQK zDYH8mk%KKbG6ZBrD_9?fH1IfZY+w^W(T&0mBro@!_+E!NL#TKli&d(X~j{Z`NA zmme6OSAO96?1oQs`R60+mMf;($T6>(@{xhFRwpkp$66~-F?VT?(xVl%g)fCxFWl7{ zpqlbRNXUm%FqZSmEv~9{K{>3Q+7JHo*Y7M>>fMxZtP~g}A|2>+xQ9yZ7ki2t#Zf?)FK#IZ0z|ct7 zz);uFG{n%%%Fx8h#7x`3(8|Ez%3RrRC>nC}Q!>*kacfw5V5t{S1B0ilpUXO@geCxx Cb?fo~ diff --git a/companion/src/images/library/10088.png b/companion/src/images/library/10088.png index b24fe1a0567f9ed97a78b52ff59cc69d3dd13a6b..7bfefdce68dd4179239cec2fff4239c6dc0706fe 100644 GIT binary patch delta 401 zcmdnSe2IC2gg6Ha0|P_F{q0|X6jPG7y9>kr_Wm>bCn`z^u$OrHy0YJ6lHgJ?T&6RB z>11_A<$6XZPZ!6Kid%1Id-F9L@VM9te&7G8q}_oritEO)nK}v@9#iMrPnHl}!fQKg zCId$U3>}z}{OOP33`z0NUoT(V6T*^E_;(xAQn2(DmI-VBHe8fe%KOcr(mQS1^_uy2 z9ZqNeTOG_`&T1s*-x+>V!HxaE_azMe`|Dd3RA+3enCy6TQ!3Z94%^5Mt`7`6a+fB% z2p)*uFfEiZY(3+fJzW773ynH{p1W&xAWLvU?u*?HPZB%WeLo#Cx^bQBU*p%U33 z(QEz~b^P(O_s3)QHi`+JsytKvhAaIq$J-lX$GKQ{{k+!oi;+oz0f<5wE}XFlFW1xh syUWlm{9?;Lv*jWJ42%#YQCh?Bm(`_vW1040V4yR2y85}Sb4q9e0D6|C6#xJL delta 387 zcmcb_yp4H+1ScZ{5d2!}bZMf#MEy}u7sn8b(_1fX>$?o6s{d<*an`?f;8z~mSp4?F*v3aWhUk+ zIOZm$7NytaherYBMM3h;`MJ5Nc_j=J(}i;wR6!ysi6yC4$wjF^iowXh&`8(7P}k5j z#L&#j(8S8bOxwWF%D~{tT-k3xBM=&L^HVa@DsgLAdSIy+Py>UftDnm{r-UW|5Q&y@ diff --git a/companion/src/images/library/10089.png b/companion/src/images/library/10089.png deleted file mode 100644 index 133c90972f2212842e0fe5767dc3d690de22a394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 573 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hp6 zA5Ry@5R22bmv>KOR^(xOFkew&NlWg-L#MYbEoR*<8{_@@MDCj&=>w9Co2@v@CMZ}K z)o*K&lUS0j?$pAVBi_`=o!#jEO}y*$7jIVYM&k*BpBXq6nJcEU?_HnYCTz!BaNukM z*T2I*!*gVs<}?0yy`GWlRprI@?kO@t#!Vp)MedolX&-I&TlppOp!S;8au9%R;_qls>Q@BOSkpiyWJrV&AT297kf4uazE6&Y&@1+{&`?iSKKfDU%Y9_Cd;OnW!pvM&cEEkS7*T!r~Ne1kmarFrE>yX zZ+o~e*z&?gtZ~n)BN8^Eu~+UL@R{pq_acsEPve$T&ZZN#Ut5*8e=nQVKYigTk`0RP zy&JY~anDq|F6k%md_t<2>+xQ9yZ7ki2t#Zf?)FK#IZ0z|ct7z);uFG{n%%%Fx8h#7x`3(8|Ez%3RrRC>nC}Q!>*kacfw5V5t{S O1B0ilpUXO@geCyY(A$mx diff --git a/companion/src/images/library/10090.png b/companion/src/images/library/10090.png index d45f27e5b7d0967160f3e4497f3e30f6589e5a8b..d44f974b54008e0bc023360d0e1d73e4e4706039 100644 GIT binary patch delta 544 zcmV+*0^j|_1m6UZ7#9ct0002@y&$6i0007FOGiWi|A&vvzmXvq5da5tNliru-U1j3 zCNFLkz(kX^0V96_&q+i`ZcB+-fzGk z3z)pWfAoLz$tZaEzCjdBZTvjB`6(ZmSowN3^K(u(vGe)jUsV^fmk*>!9RtD7tN(`QH)K8`V9o7xKA(tUVU}9p(}`#)8Y^ggR=`p;miXilgjOP4OEd=ne5(V( zLZz8+T&fkIO~{*hbR{_O?+;iSTs1f1;? il=w;_@){@$s2=}fCyRH}E;sQ20000$^Kj+39$>6yO~{O%8CP%U z@k89CxubkBpSIiX*;C>l_;w%O)UbBZ@};`m&0%bMU(Xordis{-&hzX&tj3CE9j~V@ zu)q7;b|vRM6Ny|o`{}E@uP>LIbud-seL~mj?|bHbVA1A|nX`YR&PL|d%DvCe{I6bk zH}6g7z5cmJU&t1#Cw#8**KWR7%BKG}M&iq4<9hB8`{>;c%gcUA+ut^mw{E_m*1^Ay z-Ec>Q`vuR!fWSaWmKklQ6b^8Nur)4S-`;B$AX&Vn@zjjPywA70l{y3nrAcm1KIvg_ z(`&RdP`(kYX@0Ff`INFw`|P4KXycGBmL=G1E3Mv@$TbGFSE+ f&`5-a-29Zxv`X9>mL6E@1&VG@S3j3^P6Qx$}I}~q9AhX1Jv!(_JG_agvtNSp?SIIGGiE_m$ z!DyFBOU^6^Iip}II4SX7gOHI?HG|yQsm1|wj z_$2rG9CteFy(4*be2c<|I)<3b7Y~;^wec7nPXF=Udlyd?%cTS5*SRM$99OK@p5*jG zreb=d&=<}58Wt|~KeA{1_nb5Rmg7S4&oMKm7@7x!U$|Q7##gAhO2ghi!%5~<`MvqJ zoC~%bm~U=V-nYIfGp8jhtX1+>^mAE#+4Txtcb1iHXqtR`vX8k{u-OD*z8|w9Hi+@X zFGz8m{6ccM>|w#c*B@DaeEFJqv?*3UB*lG7xYYIUd3}ny*QJxPYk4kCwa!gH-1H#H ze(%>5rae!ZdGA&){cRi~b9h0Om;ciIwK}fuqGEZ`PiLzaz1_^(weUj?&qt-hp{r}^ z(l&lCs${CWKFd5uW6!-nVZqjv@=UXK=0&v$Kc5E`^0YhT-fq(q+jx0X*2S9LS!;_e zzcANL52{$N_vFHA^KX*No}YWZVehTWKiKZrPCk76*Mi4i7OHFo`Pd;Qfg6pU4D2JP+k-y@0_2To0?aGs-Qp9;{Z^BDo8;} zVo9o1a#1RfVlXl=G}1LN)HO5>F*LI>G_f)<(>5@)GBCI@SN0oIKxm;OXk;vd$@?2>_u}OFIAn diff --git a/companion/src/images/library/10093.png b/companion/src/images/library/10093.png index cff628eb36badeb8bd272864e7c9c7a0937c3125..787d6cce4582a1241680a76bc3d21453f282221c 100644 GIT binary patch delta 323 zcmV-J0lfa|1d#-gEPo>a01G1l+or8X0003XNkl%h|;e{T-Qxy>EoDDZDBnKdf4KZ_#NXQ~bKqX~}QYj-0L0LLL9!Y3TV=hn$kDuP3 z-ZP-_U~8cc5!HaIs#?L4nLrSERdHtxrDXzyIB=*sq8gY10e@*yIR2*8mH`2T%1J=C zEsufsfdlQ0UNW%%fEOK(&oxl6g`9~q4Lc2t_QhBOv=LIc8f-;kdG}IiAPd&-LKeIa zw!+v?q9ONAS4AxpekNzRSOY&1}A6ZQkfq1vtYpuJ0cbAL6@ z>SVW=GFUe25jfKSO5OVLEt3eJ&79(7FF0`PhwE(0yOKht=ywr*-hn6Q;brmh^gfCB V)_lwV4d1DNbnK4Et?rY%0k4bfk*@#% delta 413 zcmV;O0b>4<1nLBkEPpcq01Gn#lCr&w0004bNkl`ZXr^av4 z!~q798%+EPOr|mJ7!pb~LF*u}NL}qxz5$7ggGp(PQAajPVw!_6bV4B{S}1tlwbt0f zL08}SyLaz@mj^IYV9vro#n_&~Ngl)?Fko{S!!6kDc4J7f0Dn|0&c4B|FC^j4=P*om zq>^C!fPg)LU$6u)301%+p1uxw7DN^R;EkifA?N9yk)pr@Aqm2%s_QL%u9LzM;3V*A z0+$;N3XO0m$AS=EX;GMm09nA;^IH1QI5JK+3TYNNc2NQgkbw!iTf7eS&HC!fa+^pK z`-sBv`^}<#;eX0VMv4@|>-C~-4P~_RREXf&BCsOoPC=zmn|6ZIW1tD;oFo01vIaGO zbl^7o{+>C#*D?gE*SvHW&pbqD*w$>R1emL9zo z8JXB$t-;asrs{M2hihB7-ImO%5}&o{LDd8^L#NGYWp#f0u5D9PdD1v@kNjt$b1_qF znJd{|l}L$XmT~>|M$yGGaJ+&Z~J||q~y?L@vo*#I{zaWJ_Bdq)LMlr>g zEC;r4urc8AT*6vrR#f1j5Hx9~{nH20nM{XTlb&d#Rrh6P%g?*{Gm&rpO0Kp5@4a40 zj+*bgWoI~LWj;EaC?3hDE3ALkeZd3113NTxgPH_h>^dNDNvCsx&H2L$XFlmZcx^Hz za++A<9M;t8d(557e%@jh-C(N9?{he=`)v|WO#F({2esN72?=U##WC+hKQrw;^Ke&I zWdKu-c;SoBMzs&721$o7f8!2Fo^zzawMSv!y&oPW2Y>T-{}XxHIaM%YT2J^!%Wgl; zYXx0P_M0f5@@+mEZz{F>zV73W($sZ~xwnEHVoS=;wCvS!k2PMO+9sOFnV`r&VeSQ{ z9MxSX`cBx3%=~}<_2R|Kz_cn-;u=xnSXz>iU&P>;Qk0pPr{I{Ilv_j3Q~}gSdwa$T$Bo=7>o=IjdTqRbq!5J49%sc)I$ztaD0e0sx*XcUJ%a diff --git a/companion/src/images/library/10097.png b/companion/src/images/library/10097.png deleted file mode 100644 index 88aecde84abd30685884f17be0025b7cf0eab96d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 953 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hqH z6P_-PAr_}&FP+c6oFKveVYzqav-SJf^+l)VRNM$m74Kdu$@P!5iJjkB|K6Px1zVo` zJ-qsUUFxn=`2H|9S-9GCn#iSe9nSM9IJID=Y*^}qD_XwSRpRfPXIdEwFv;J0UVHEP z@3s&3oyAsu%Kp-DIPht@)CMPk^~ov>!Ww?Z6;|0?I=DwKWS-iCWhNUM+ynS~?EW7S zFqxvv@gt_*P1fz^RhAC%txJ83X0qNn%(Q1icv=I;)dxK~D^DvOJ<%bYsCvg)e9{ho zJ^I)8ESA#k9No4V z@^>~o{jun^s_BW3!Qod{imgzYuJhiNbN=R<4a`|yD>NmJewrS7l>Mhr-CUQO+|P8c ziq1aOY^JTWFj@Y%q{YE$+GQP!mu`M+b&4f?T>$T^*Z%uhS6wW~y{c-l^6s7OtRXBJ z0+#CE)-F_aFv(*sclmYRJid&jBBn`KYUAb5_;W#1%CCu(Pl%KKeCVU>#Qps9g$`y2 z_^n>7Wz>+C6~$7zMM2E=@Gh~Z4^PJAhKL_H0>zMNS8Eyq@KOc2w|oc8MF^<58) zKJK58RPj^q#J9Xd7XIwJ9;lmI6ihZw6K9fg3j4BW);p#=9ya|~8_N179QRRw{_ye5 zR#U^?O%jLS>3Vo_-KRe#4!2}XXTCFF{WdQvyFor| zdeVv|$E})gU3u+WIMvGKB>T4e^%X0&UAxuReQawNL$7KShpy=oP(Z zb8gxh?vEGiH=T^$-FGeV_=k4Uz9s3m9-ejOd@2<`le5;4ZT;mfU24laB@Dv0uRH(o zVXxd2t+b05`n7E%G^Tc^?JL;M-dE>(=&2mbahx092p~Qjn5Zl4_M)lnSI6j0_BobPWu3 z4NXG~&8!SftW3%(LPgL{KzkN{kdp@YDD0mp^NAgBP+z2pd3n!lFr00<$KE^zia?}B#$Gzgqc zu5RRA02cy8e8731p2@oaTwu^$#RK1>ksR_|R?4WFV0mJQakO zL&w4ii+X>mTm!g8{6YaJK9zcu?dZU4Q`6d33$Q~0qe_xFWXsb+Q3WGaDcaAu%4$F3%i7B1QJyhIi@2=rg)tOcM^@JC7bIjg~xEuN>!w|Hrc}Y zjKzOmb}^i)>I%nU1Dhd`MME~l1<<<0$Zr&eQ=f4V9J@eu@F&Oh-h;pgDc^TN-j>Tf_-AUY z0Qe}r_Ypif@N&GhiSV=s;ud{TK77>!ORZ{vdtu^&`?QB$fcm?0%fl4-bA2Z#PgAh6 z(7xh)+ylQyzG(7F`zHW@r%p|q@D%{RBlTp)w$Sy37?>+K%08Npr{SCqXx;$PzUYBr gux9Z)Gn$$G03XsaU~lDI`~Uy|07*qoM6N<$f(H|F5&!@I delta 745 zcmcc5wt{Vf1ScZ{5d2!}bZMf#cs-N3r;B5V#p&2fd;5e91=v5_{LC5b^5(0fk$jEf16LLdWW4l{;w=O z=RA+$x)(~8=hi7DaZOH~TdMcqThob4&tAWuWh-Y`U+tCh;`;K&$r?3wF`AdQ{OqYW zpCP$Od$kT_uH~gKZ@z7jscSTG4swWGA zESz3*f76PWPn11rX4T(S(BQjFD6k|Zwb6G%PW@xUl#_K1$GBZ8JF|{;h3#d}ka1*S zuMJ&PmQuM!@_vl1^iJkA60*)yMgB8L=uMg|CNz~Pye-tMLFIg%*P=BQTpxsL-M^eu zIr_c9&B<=xf}BauWEV`5y<+mrDC>yzGQqNlaB~|@DeZ*(=#m5HuGc&cwB0mAROfNn zy)}DG*0|MYEmGg(`cA>XS#9Q8h6=q6Ju5UfxgA(Kk%_hW3hVM^*1TD-3gi0saXGBW zEr^@hZq2A#JJHK;=Jcr@i%q6YbiQF!VmKvLN65~5%0s5&Q#bUsGX?EjrZDe8+D8tf z201~GgVGFAj&pd@)-|&Ucy`5ct+7tXe6c3`mApv!+r;{M2{U^`1otyqUPBMEY_hkCr4RadQcVzzFaOiBV{J!M8v-XP{ z=UchFGPePyCy^4@h!V%rl8pQ!2FH}5%)~qe$K0gUqV&4_@TiI5$~g?GAQdTzC8<`) zMX5lF!N|bSNY}tn*U&V?(9Fuv#LC1>+rZGuz~IVU*>6B25gKyyQ!>*kacfw5V5t`< OQG2@jxvXYPH~+Co?j38H z;1b@yCObKdNZKa{QXzP3;Miuwa-&t$oSp_gJgZwOtOD)2t?-d8j4Q;$={ zjF}&~Io;8->t<)&ea>NVd~B-`;|8P5o8kXL^cuGpTzWY_pl?@0pm>8X=MVKiOiYU# zoi@ha?gNIqNQrAiiDPL=Mt%{4V@gqGVxEFyZc=JddR=~a6i{9iB=4M`o12RdP`(kYX@0Ff`INFw`|P4KXycGBmL=G1E3Mv@$TbGFSE+iiX_$ al+3hB+!~f1Sn37Tz~JfX=d#Wzp$PzMYULCF diff --git a/companion/src/images/library/10100.png b/companion/src/images/library/10100.png deleted file mode 100644 index 14001a79a50f76f8fec4fbc0bf3f828ecf72da1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 806 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`2qYMOt#!Htq&N#aB8wRqxP?KOkzv*x2?hox zQ%@Ji5R22XmpA5JaS&j8U@7_3>P}o^M5nld5Njt(WAS3w zMI52$9(Dz|>}+adO7v#zW7~7^Mb7=V@6P||xXzcSQ@g1=?cYYue@2@o2wgeEx+Q4A zq!gJYDFJgGoGmY@EK*n|yOh<7-CeU)#AVB}EloFDm(B>&P>|9%dwkvEMagekU+ix5 zViZ?cZupJGsci=LSHr*Te_Cpe2_$(uu5fKQzhKwmg_C)%vnuU!v~BBTJM7z7!P%#= zCec|TmZ_YH&Eg;{dwI~C#oW%)s1hnKSmRqTAre9NLxCZOz@@|2yHjAB18 zvnfT-Wxm!YZBeyn$AdR_%a~s+(5Srm>aMCqjsCNkw326uaS11!pUe3qs_(hAit#0v zb?e#K;uQ@>maAIx|C%mY7ZAmtZ+MCAv$~v}^3TT;yzTFZs~9i;^l(L^i*H(hy?W<+ z=QLy0^IdO*bow^MXNj!qw^fOrX?5e5gWctmA*Twr-Jh~G@CTdG$v;v(bL5;x092p~Qjn5Zl4_M)lnSI6j0_BobPWu3 z4NXG~&8!SftW3Px#0%A)?L;(MXkIcUS000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyS<7a=#{ zU`h)B000?jR9JLFZ*6U5Zgcc8E1kAg@jxR>u+$GR4K_NKkgYG{#3LoJ>7cU{eFeOJxNWi+u z8x~|d#_qOiMM#J-ERw@|aac-*0B}ABL_`3Sqa1TJL_#Rq<-eP;!ej%*Vkd$n0PAs6 z0QBKFV!>-AOrvKBNkfkD{NQx%Z;}vtgydSB7HSd#kO{!Td`$Q~fMaw4<3hC7W&c}G zbT!Gqe*}<0a1TKMz`QRu5k#bzvk680)IF|{A(S$3W;!LtZJ1Oyh2^P3EmScI~saI8HiGSH_XV&hH$P&O3%@!yre zGU$45#^w8u08oL!G#%-C{ZCF`%yHpk;qQyse6&J71<(dy{o7mGYnK9KvdC2=W!oe?A3am4a@!&WOZZ&he|amT6`c zKo#Nu3F|cv&r(#W5gP~0;zu6gcmd#McySz6WG#PGG+}ddI|FQFwpQ5kEdZ73qy#uW zYODajJbX+y(N%z>uNKep$o7M^;vi-;-)_x_e!fH~ z@HPYKsG|9<8!Ewx&8glaGDgGK8OSq%I~s7N1TE_j+v{A13($T+TwZ^@^j(v&pcKsj O0000Px#0%A)?L;(MXkIcUS000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyS<7a=l{ z3ciE@000?jR9JLFZ*6U5Zgc5B3<) zet8!c(h#RG5FX;8I#}{nLfL{F4F3RX zzkjNHPz*E$3lapnN2hM(A!Cd?2&J%|b)b^U>`X^ijrp9JuS+r6X{W-B2OVn`gpq{u zx!=5lo7ZKZBj{Oc#jur|;LSkJI`y>dnI}(sntcAyH;W+|QVyWhQfA$U9D5(q;{JSx z@I9GxVEtXpk z48*viK*<@CCv2fPGGX+tb{rIDfd~i)O1ZWdfm;`0CKFVNx8q!3U?`8qI}awXk|;S_`WJj*>CfKd8rk6ttfw-pyR?TBvtPm!R4z@65)Qeuvx|3)gP zAaDUNfx!1H&^-^`AXSYxE)wo}q%ab+BLC3Ah0<)x9}P|TxKUh0fJ2$3NM|JPEvh;n zp8ynJYGek060Tr-9AxksZZiI40G>KJ1$qwynk=}t`5(I>l5G>B#twog4}~o+0Lfg6 zXgI1*8OIcV<~s=5s$5v*)DcMCV4qKelJ%!!x!p@$e7_LG|1;n>eo$8&tPPr9k7k6= zm!(&V9}$qgB;`QF|Am0>I9#LQX9QH6TCM?mLNKxpYiFHfa{z>kFV_D7-(h!}ll7;R P00000NkvXXu0mjfG~Jwa diff --git a/companion/src/images/library/10103.png b/companion/src/images/library/10103.png deleted file mode 100644 index 8fd5c289773e56db67ba2f9cbb392ec821b33b77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 737 zcmV<70v`Q|P)Px#0%A)?L;(MXkIcUS000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyS<7a;{H zw;PK9000?jR9JLFZ*6U5Zgcc1n46`!)|1YZ#1Rop=+oYin+39pPI7@s;mI)|(KZl5j0NWe@Me@_RGXop50E&C? zhAgD$PU`~HHv})OZqOB8D#4~gq$aEoNQ}xNy%u#R1KgH{WNaK^0ac0^5MkeWiG~

O z@)>D7#`u@V9e``Rk4*+gY(1#jI`j`vJ46sHxVaHUX(V`#juhtWEL~=~xfAwx#JJyI z@}U9YsQTp4JKk6VHhWX(A|!;OE7^LDG25qNJD6-bnjDkxm39illZr;mLQ+p#_@*+& z05Qfsjdtdz63_^$RH*J=1L6D^9%`sX>un6mcdF(AUT{7~JuK6+A5+YpS zDE`L_iht}t;hz!C>0jX}0#U_@q?+PgPC?VGLPo@zaG{s6TUuv|RQ&>k)wBW{_CD)C zwqZunhUz^z#8iv4gJQkH+mYWP zze4{9?b=O);b$~$YByNZf~;h$&x5)(%9{muas!JA#R7I_*5wkk%GSto7!>n)4Lldg zLFZp~0KbwAP7l6IC8+hz$LLqPifCHcJ%7AvIHO@jy@p?bqT%kvV|$u|NU0ZSUOIrM zs6RKZ)^=qq@4|&5q;U<+G<**Rzy;6zSk7D1q2lHk(iJJ`W_k%58ntfz}(NX4zUGjI1DGT?DB zUj6UC{&~AKVNOT=j(KW?_{?Xxc*{~Qeo|9TeC^*YX$))$*igXk4`JUwa&jH$oxWd_ zwcz&C?QLI;57xW?Xgj+8w#_%Iqqkk^x|xc?D_$O|tT$yaW!q!%Y!8z|Y{QWs z+juLmVIJS#_=qbEP7TT&B7dhbEU@_TWaIMmQ+3L3|L=Qe0t~IV(GiJOgmW*c+ALKkqrk-;PZvkdHu*ZG@X2s9P{ z3PKXBGkHkL4s#w!heg zdjZ4dl)hth_QTF2I093agiAEQcroPja0-B|zqjHN!iaw-4O($mRjLF%$lG%?x2Y{A zGf906z_T31UnD#pwLm;4r59l6$v!S&U_?}=-)Q}P5rPe)wNE|!O+XKJY&!IPxnh7g zgWjggND2xWpfNLBLyeR~{V~~e3LvNpT;+jWL=1==p{k>Njab9k9|OM?lCw!Nn}(JY z30UTZ-$s8gmK6{n!rWCyDMd(fvj})ldJpk5nDJC)Q=5Y015WsaNg@%vDvAx(ebpM&b|73 zUXC4$Ds};3WHX{X=Q$3cJQ<4T6xTFj4{smK^A;0ag59Js|P%6ZL@P%>U7l5*DMk1)&ZM3SeW9e}J0Lwjd;ykIoMh z0l*Fao8QGIL~J~I%N@Rj1K3qejNq^!Y1(932fAyWfD(~?I}yE10|(9^&R5^grVoTM^DLQS%vkW;|f2a&s!|AMGB=ie*5YVi+m>VVD{MAH>Hy?{c5ihy0rm*$Mu@{JvXO1zMlXk-%Ws)?|we8Ofm5_ zV4dQ{ldq{T$+X{hd#-FSc-|X60v-W>FW?23-CvpQu~g^)3jhEBNkvXXu0mjf9P_>M delta 687 zcmV;g0#NV7z1z0x?pXbzZy8H@{9AE*xcqru#(!m!t{&u;4 z2}IS^fQ3(og9GrF0mxD4`pC{cbNJa#>N$k~D!2V_G=N*6xv3B#k&72w{uhR8;}Z;g z5n-(aP7`1X_tC)hXQE~})8fs~T6wZ*GciQdA14w(*fF3e z+H9jRa}MYD&B4~s0y??FRsYfOp*>Uvh25p2=D+%_Q~o~(H>-XLcXBtj4Dd|@NRk;o zjW#f|0F@P8XWE41IDo7Zv|K@lH`sMFyDh~l*mMa-^Ca4R1`N~$&{~6OA!6x&r5gn; z+C8<>@JE4vO7`kGd<=x5bzcemPsiBAj|x>y>2g`b)o&#E8h^?oBe|1 zG>50JApU+ou!;Yg0bxDqy9A5_oZiHb=u5vz|9cEfR1002ovPDHLkV1kt8I3oZ6 diff --git a/companion/src/images/library/20002.png b/companion/src/images/library/20002.png index 3f3d2186631fdcf065921163f7b188eed07054e7..ededfb8acacda3d639dcba302ec7db42e170be63 100644 GIT binary patch delta 546 zcmV+-0^R+w2jK*eB#|*Gf8GKZ3MwkH%6rEE00HtzL_t(&-tAb+j>9krWGepumuC;# zv^K_$Z9=MDwYR8A<^dQ8DEIy#A|)nxC-Up}M%6pf38AHOivuV{n;7U_;yWpjPM{KR zuJQ@g;yw6O0tU~8PfS7wo`RM_4uOvMo(XynJiC%L8NG(52n+*Fe}^}g6Nw?PF@}@% zLKGH&ng~yxJwRUOfc4(3`7#Jca5M{k(2!Yrr3u~-=79F@7y)o3-a^w0j)vgbwpU}c z!;V#f1dd`@cyt7hJ2bCJJe&jj=^D#{2A<35y6phGc7qWEKVA0-faQZIt>Ca2+kbU4 z`sno=PZ0+3S$E)=e{JZ#+nafY>7iTjb-Tkr2hNgn$$=t?ajZF`EWku*=)QVZ4X#y! zsmj!?y7NN4gT6qZhNm5@>g#FrX#y60m^~}-zXXV9UBMS+{H8Zs%3LFI2oNtlAn|Ud zkh9ZmeK^@FLv*JNws&C-eKH4JRbJYy!w2Vq>L9}2lo6STf28UMb}-|dACc`CuZ`D% z!elZAr($u%3s39xn(qVMk$mAS(hKFIUc+-8fL*fSM=ckt5$KJI`pU<3Fc k9QYFW68IAM7}ErP0BpL;jX^)6ssI2007*qoM6N<$g7%;Q#{d8T delta 882 zcmV-&1C9LQ1hEH@Bnkm@Qb$4nuFf3kks&O9+yM_4A`J{dzPW+aMN3aQ(ReF?&ffs8Du zMNmc`r^EK+jHYiM$She@L)E6KYNI^RW;3bFYt#13bSj>Z(Ow%vKiQr9Sqj-40y1~? zG?uSJYa9PDXn4By!((w5--g#(rE*%pENHaa4Mz;@aNU})K~=d>nnJ^5>m7$Z z|McrrCs(xtueYkLY$IGa43D@4Uq=TAdT=~8y0A9_FYXkx)Bt^UsklZUtJ27*4$^ZZa zfqW$f=I!+@GEB6&*JhqeXW>kN1W8vGNPrUYOOj5p5*emf-}AlYA<^lNz_Y*#;Q$2z z#}S|)gt-D)N!5`|E@VOgNCfbWN4yx3@D7JrvbP(UB>K#s2`J%!AQ3@-)6MP* z7;7q)+))?-@K6?Wl>vexM>UAWYZJ2qc=zfk5-%j3n4;1FX>z@I^T=Ktimq(T>$$F0 zkn$~2&}b7@osIUh4hG?hqIWqIp_B(tE0oCA#~qK$^;$C$AaMW)0U!>A7ziMQG@XjZ zy2{%Ns-O`Eanva;D|v5S5Xc?qdg#NHkOs5S2h$eK{e+R{1MHU?C_#lOg zQFY)HbCG3M@usMar6F8f%XiPdjTot-<%TuLb{dPOXa-6@Ce{O0yLHrWfF2NL)CWJk_>PJz_tfEaNA~r zLAwEzRgi{`v<>y9e=`E(HYGR#MiAgxhI-xa96%KEd8SHR z%VB_-FIAj6**}xlLcQmKV-#$T3@7P-G50om(vEx&+>3$@0ohVEFQ>9uFm(~~VuEJ! zX)RUIaYc~{JyI{7iJ62{brGEq3;szj7YCi>O1fllh8kX|z+IIQIubU7Ma(itcRTV- zM>KST!fkwo^)I(%SDW1M;K_A|`|yx;-PKEgUeLe=y*BzR)~fm-0d(`gCFc=;+KQwa zX1H6Ez1x`6=XO=q#xK=T9eTl*LV#8P|=0MZ&z4HPzoa4 zjUg3#stUD5lil?I+ntljelh!v#x!uj??*cJUo3r-B&ZfqFP7;5z(64?;DZUVHGlJd z+~xyM&H(v|Gy=*5O;{tr@}yaRSE-dEd~{$yfFkiPxdDVkT2DBRmoHm36KqQT{WKY5 zg0<_8&Wh1tqLH(7b^#1r?GYaaM67aX76a5q0k$<{02DDnkO&hw0R+WbMCfpK4MfA- zl1fhPl#qC=F&iaEwAg=+C(3%-u)xdd!M2t*Ek2GlC)?!gckYO4_SJnw^9PR};RoOc;0NH3pZ~2QInmJ_y~F?j002ovPDHLkV1iepc|QOE diff --git a/companion/src/images/library/20004.png b/companion/src/images/library/20004.png index df09efa350ea2b71f341b1c4bd86b9af7c56304a..277f9071432192f8185944ca54ec237a09a6b6da 100644 GIT binary patch delta 649 zcmV;40(SlG2FL}FB#|*Gf8GKZ3OFbvFlsme00LP_L_t(&-p!dwazh~uMAa_e|H_>O zGhbjae25p>#05`{h6aOj_wzZq8E_W>*A=)7fa^IxUIhUEK^5EtKqCph0}Igo*_(u* z^#DOoL|{fJX#MV-Rv_+cmw^z-&+i%)a7%@)%_<;-9pvY964Gl5e-S_k3{*aLC=fLu zC=d>%LK(*_K!H%_m@)GyO8{;;f?k0Z0y@XI2H*(<3<98~DXawGTsNVB@KwobJ@=n{ zU!T4j!ze(kED(&*vKKvl8`EVN21q>(sT3g0+x0X2O1&k3v`&;DNUxrHbwoA71VE7o z-PCvaK&_gW017eNe@XA6$EI1(EOj=@UXOmk4~$KDnxmU^MC^~CR?)9_LfS$fSoynC zdFpOxBS6e5n7!C;1-vipnU-hw*;$5A>y9~?n@?u1$6aNYW`rL)L_WBaAT)HFnCc=#X- zj?L@CH^;H)o`gu@cTZuq48y$31ISwxqWBOB+UGE<01eWFTtx3iJqchT@OC^3p(A|O zj-Wr13AkJUgpDqa7v73%5p;vT8=x{_C@V5uS-25EF=$#%#^$Uh<0b_(6N<7iO5PrK z1L!6g^>py@+EXaKT{Be`bx+a$IhI7~XM41u14^TV{fVE-=0Lu9w z6#@?ZYKC$?B(HSpxjr2}viB;SQ{eHw6%ybiKu(bC($QZ|kv(r6PQprr`f2ev0+$`p jLOt+xM>O=g{@d{%m*Y20HW7U)00000NkvXXu0mjfV7DN+ delta 815 zcmV+~1JL})1?~orBnkm@Qb$4nuFf3kks&O9+yM_4As}M2&&&V-01|0bSad^gZEa<4 zbN~PV002lsF*!Cl$uK4$0008iNkl#O0Xh*fClQeu2nK>fDt)d3Rv2Ugqar0IO=zit#GZo0bcX>9 zrvi*q_$uh0QI#-m^ZGv%{el53_h?6=d-NQD5QEo~{a4J>c0(ZmxvnD7wZk>1 z5%yw_+*~JAFaOfYbWB`Gof@k`tQ9%U@%QZpQeMEdNGzp2t zx<;b<(F8zQNDjzu$5!~^ZU72`MGn!9??&PJblif`y2}y;w#1&_AiiLL0c!4Cgm;bl zbP5zeQ0(}q@GT=6uJ2z+1adB5en-a(vtmtxTV}Tbz&LLdifrzc8v&?)8P-gbwK$u} zxQPMFgrYBuNtVam0BjQs-5tP@gpB~4Yh>*XqagPI@C_8@Ee+P)@XZ-*tJ541ybquo z3xJxj0|5H|kQ4+QdTWNhKQym&YFyuf4>7O8IR=LL)|~(+0Z0VRE**Vy3NhX~oP>%5 tJz6{tfnPhKFZ96I9nqs2&(Gf-{{zJoiD}fLMqdB`002ovPDHLkV1lq>Urhi2 diff --git a/companion/src/images/library/30001.png b/companion/src/images/library/30001.png index a699fad9565cd54ddefe1b2f6cf9e9734ecd2ab4..936732b2e39af666f330a515317abb1350b098d8 100644 GIT binary patch delta 853 zcmV-b1FHPL7U2ev8Gi-<007d~e}4b~00eVFNmK|32nc)#WQYI&0~kp}K~#90?VQVU z!!QU%Q775u|Gzdf>Z%<#)dQi61QutNPGW?`EyBol$~k8WOp#Lh{X7#Mj-4;D^+1Jd z&`N*L*eTfx0T`kd>`@Vn{5}L=gkI3NK^?X8U|9`Rk*0Zsjep1ho7owBq7cAVb_D

Eh0JLM= zaXbjZYVe5w0$3Gz?)cUOv3q`c3<<#c$q?Z-QV>|1uhM+nx)ZoFJ6H>T4VD1BoJ@~Z z*}>C%H3i`5M1Mxn$`0P-#flI-Ah4igdCx^6Pgrx?5h zzL^06K3)RON(ckoNH-!gn68g6A5RhF;p@s_pNr*{@YsgLC5oB1KuDL!V zU|Ik~Ap%WOO7;an6e7?f=j^8sP!mDa2{L}>(~SUX6n`t*5Ji#VTv4=wkH$p}5a{84 z39yK#n@u7E98L(p5gNs92mp+?o<#`YaN;s>F|`cwd_L*@elPZBPyn;txL(s{_I4{o zx3J|SqUj{{add3%IIJZg=iFS|df!X!b8Tw-*Yai6nqLa`s86D|gpHh_WHNfk%zlrs zh4Nv=et*X37)=2n13H@_P&U0)=~sGLKq9beCy;Bbmbyn&EqN%zx__U%UN6ycvvgk@ zM};DAR7soyWyI!av54@G`@5Mmj#>h^BIMX*_W`VLvF>_7g;ltIZru!8QT(8fmyUxh z08>g$Kc-$4t8s$`vhcF_jK7zxP-0sv*z=@WW`A^EV=urV$SgQr1E7}-iM^Au38yI) zuZtf9d6~$y&pno7XND;Oa2(QZC7;g79zhBAW)OD}>CWJ6gN2hCJqt|h_V?mDf}}fh z=#*Bn*SZGw9N-qc;FsovTMHC3fV4TG@mu8a=;Cw*+T&K2fRzE2*hGyvlUlV4z>#C6 zwN3!*J%Px(Sgyy;u4_I2BsQ(E>RCwDdjjLRJ^Mr-;BZ0!hZ6!g95n&l^_u){EX@E> f0NNv#fW!F)dB(`*NdBM^00000NkvXXu0mjfz1oQN literal 2879 zcmV-F3&8Y=P)Px#0%A)?L;(MXkIcUS000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iyS<7a=Nw zW+u`A000?jR9JLFZ*6U5ZgcuIskNY#0Zp(?#1JUl!y13ib4 zLi5!l!J|}G3$agiQJ+wsM+zEQKWRlx2RYch%FPwgw)%+5T2Pd1RtUwj{VV`szeuuV z-mj9JB#&yE%_bR>w9mONb@^!k*d|{sL`i;WYtg6e&%cf=`D|fo(q(`9MI!tx0A-QF z>plA1lu}b3!efwL?{PU4knrvD^Ei<9A>EUw7B#h-#>5e8(t3aKLkc-6#Mht50qWA@ zt%lrj&u#W76)q7WN!~xT=xvgIUJ9HP^5D40Vvy8BR=Zj1l13KUr&iXVmjVSzS>@u2 z!DX`Cbsgz0v1ccE8hsr4N$VOwLXNzsp0BNJV1`slVjbc@OZ zX_8c{CD|vNa;)iV^{gt%)m1fI!Zm~>*EoyLBttZ5D1<47xE99;(#RUJ4F%D64zPp5 zXV5A(8eO{T@(%QWVzWa78at%|c%c9Xj7~SYcOFovfG!GGLB*fX7Z`0v_;$OAF`Ug{ z10G}rICkd<3cBg|=W6Pl)j6Pp!%+ZeG#qR=uv4^XmPGFxwE@G}&5J<+nqZP-Kp|?0 z0$SAMtwN&@MMX{JtM$C&j62q`jvWIIS~HN87Ez&{!8+i;VFzdqZXk+Mx?Chp(xfzN zXUnUA&yC(ex@!KHnzDlf#a~l|J4m;vkU~_H0IPJ|I5su|y6pwHj{$(}81gS(XAKIA zGy^GwH-_QBo1t9yf84yd?bv_^DRhmL6%=(wykTIYasX{maM(AfK%+pXbP136A9Zq*+{=(Sb^JaLk7R)+xACF)*{?b|yfBM&RG~t&xK848dpkIte|hF6J@0GwHaDECGoi zsZC+O%A-e(P+msHG9g^HlJg(8!~-0r2deB@aO!M|_sxN#wIkM;0My>RkVJ6-+gX zKSEGeDTLs8#FlB%40)AF+U4>?UFzz@U@^-i?}U*Rgn|rdh$czO@|Yx3*jG2yW0bm7 zhK3~X!ek~?L8wU~Ttk?ZJq|q4XMK^}3Uvc^YNLUmn)!orD&ae9W6;i~R;|LW^>ofs zRLD|tHFy}KzvDZjvO|FaHwDd-76o07Njm=fFowP~9d@7$s~ZL=X@dcSH$xg!<0;DT zr$L#;A!%aOO_CPoFjEKg0zMdY8xW;ck}k?A!?YS8hnRnBmnps;S#MYNG~10$uM^q^Z&>`;LO(f3efdzsi*5w8Dp8IKuQm*AOH| zllIG5;z;2L5rc7(c}szA>`y0r_E_Wbv}Mv~1iXcdPD(3jVZbo3cax?h!3O@J7p_`C zav_({B+beQVS!m*3Mro=Alk{l={OOI~e?L;efjR63D&U6)1&O9KL)mbL z%~6W_NWq6*q^?OxRoXjRieeW@R}mz%Qa1Dg4WnB-2e704T>uJvHY!Jh-Nbl<0gX49 zrK3T8(m09VNcf=_H|e%#fLW#$p+)(S5LeZ*W>E$>W^@LWXGWg^=(d3~&H+_tzv*B! zqxFK&gu{l-2U3%3Wx`C4zN3tFd_}@|Fzeh;y~S&1PY^zoqb61{~!X7bFO`G43reMK|4#LLxDyW z6*e$8`hdg`%b{!SD93+b)b~aJ8tm{Hno=h$hQrx#&7jt-t285@+y1J|0WEd^ z|3_fQ3Jhm7aC(30Lv2_+n~32!RkLQzN=IG`j2uq~Vbsg_ham8s2aSEQq&`V~()e^p z*Uh8KYRMGVw~P8DkB^sczq0x6v(BlIbu4r25h6mE|vY`Hc2YMEg_8fwD^XSHd8D`{DL? zN8s_&Cs`UkKj%e-xQ4&P5c{Ixv(s1KUVmN+)Ti?R%RTkm2nZW7CXdqNl3Gft%XzZ% zjhENox!xze$#V#Qn$m4B*pwEfJ*wDC*PQ5!c7>l80X+2y$z!l26g*nA6bLG7U9{ai de8)xe{{c=w3LCSt&@uo3002ovPDHLkV1hP@M>GHc diff --git a/companion/src/images/library/300011.png b/companion/src/images/library/300011.png new file mode 100644 index 0000000000000000000000000000000000000000..dab44fe5f5476ad5f7b5d32372be65aff370caeb GIT binary patch literal 2821 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 diff --git a/companion/src/images/library/30003.png b/companion/src/images/library/30003.png deleted file mode 100644 index fe4548967cd1905da62af4e5de165466da0963e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4233 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 diff --git a/companion/src/images/library/30004.png b/companion/src/images/library/30004.png deleted file mode 100644 index 4db2f79bb9cb87fcf9e811738b3ca3f53f2c7170..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3049 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 diff --git a/companion/src/images/library/30005.png b/companion/src/images/library/30005.png index ceeb0b358f1fac044d80d38649490942d28ce0bf..8761d4fcb984cb975b78e7d3febab2bff3719b8b 100644 GIT binary patch delta 2346 zcmV+_3Dx${7~2w%B#|*Gf8GKZ3Mefen2hEC00`_!L_t(o!?l^&mK!;eM9qQN$Yf@9 z&CHqq|Gw_(R+Y$Du(;oOprlN-YE+_H0$+F{c;H6!%^WcFbCxHQ=RT+#LzwAU%B(t? zB-wPG+NemkOZrLnmGL7hsSbI#C6hSjX3vX_mP~&?+o)?=FS4J-e?T83JSIs}8GAol zHgAI`!x&p1B+uG^8UraLv#Cj4`qF6D$CCUkajlLfK0!d>G!AK zS4{Q#@-HsMr-)<7*V%ra3p8Axb-QS4LY_sU4~F$@*NcuZtISgTGzNyjFRCwQ4(q5% zJ83XrHZIziOq;dof9Ej}KAsLu#lj4g*(kHoPO&XI7EJ3?m`UHkK!g-7siXe-v`8xI z3c0RQo|Z!t(V^MgF&oHJi$z*w(vyrhh3dNzxtP;#02 zWHuHXbWGWNwSV95VHbFo)W&TbRVUTy-qPLkUggF4p7FwYn%j6F}uYK&^b7Ysb?f>eGTJm$hE8?jIJ zIi_ATWVhkU)KiEX>h)&9<;9|B-DK9k^y#DP=%eXL2KYZHA0KzobCT$WBA^jC8#V8;LItPO58nO90Kf&37HQV2ec8H% zMfZlv6zU^l+LCZ8l^}rQi`^a!!ej9qmS~qAQfA)ks5+5^u|CO|-``%=cLW9dU5{$k4qV<5Qw(gstR zM?2;&?pxS;78dk#wIumq5!*$#%U{}mun=MS7mcQtwYFib$f{7`<*+)ZX+CleOAE25 zMY{B%fBaYg>Ks*C$H7m_ZCkd?ENhqO3zYCSK^|hGoZ7(3u+RFjE>NU8VLr$$d0IB5 zI?1zf|H#yHouo2*mfHA(V<3{GIwisq7@iG_L}iu_{nUoGoiSmazqPkKD0O4=i^VU= z3j>z_&W0T}EpGXEYPt9GJL#%5e|ub2;Goi-f6e2yRvun)fYkx+ZKv`qP!oy6y}#^Z zhyp}1)Lexg_ulkvO9TgO1Z;0#G~fvL8yj$Q2%;vdr*$Gx*C<>XO`M;p!;jUF2AHVEt86z2~QMKz;M~=+Z@;x^lS#?4N1DsLmf> zQAF<{AUa*T1mLyL3_*x+M}H`ij1Sofz90DKm9Ni|;FwsWM|1W!4Bw#h6$ZQm-kVHz=-PwD27Lxj1mX*(SeUJE>CT!G$^(mo!tN?vS zo^EtFuzTJ+PU8q5{Qs#i_h3{Fr@vx2DDhUF|49rK&>(l{OA(5(LeFjJLK-@BaKP#Q zC$r86Pj{3wg8h4El1`dG*_D5=*`dMi1fvoN?W_blw7k)9vpXb_B78q%OvGZdDuBOLAXQ5 zm0W_UadXgC0a^u(+JLh9V{@G25J!8F79`VfUe&eFJRuu&*y(q4>)a?EjfgULMHRU~ zJyju=4+3M~9}!v~f4emr*XfsC2-7H(7`2+v{50S0!`z)>(Imn-f5jgN-FJ{$`%p`w z_eWx&!rJd&T#F_oScHUz#q(6Q0*HbmG_;&Lo7fs6K&WNWA=vS9&;18hH0Zrj!L!h8 zQbAxF+SMmL&cK zH>zWiFlp$<&^#wk$~_X+#v|u9lbdI?a`~>CgFYX*Wz{@ke|@y6aN72h+F+5Y2E}q&}&$HCUmkX2hZ_IL;Cr?Jgl>{hap>>+u}` zaz-@R4HUA_`3f7&9bXXw?uW>yod{rM$7$?u?Kk3hs1kl8U^omRtRY5qsFWZes5GOW z8#&JFkG`?Mf83HR?XxgsNNxIZUP*OWCv)EY@GBEjN?SBdhB2-&wzQ!4e{w=XS-1~Y zKbV1<^L94U@m$`&$kYbxPjY0l#Xk&IKNdin4xQimVy)PVWnysK{_KpXmnZ%9KR@Bx zD$z&j_WX3SsT@lj=lg}~=KwrueR{ol`H^cotGC5eAZLz6w~OlZ<)PXC0XtA(h?7Mt QL;wH)07*qoM6N<$g7dJ1kpKVy delta 3107 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 WVEP`H9_`Nn0000#%MB From 575ea504aa7aa14798f48098836eab852031b018 Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Mon, 24 Feb 2014 14:28:19 +0100 Subject: [PATCH 37/45] Updated QT resource file with new image names --- companion/src/companion.qrc | 156 ++++++++++-------------------------- 1 file changed, 41 insertions(+), 115 deletions(-) diff --git a/companion/src/companion.qrc b/companion/src/companion.qrc index 1c4550d1a..c6246f314 100644 --- a/companion/src/companion.qrc +++ b/companion/src/companion.qrc @@ -168,131 +168,57 @@ images/library/00009.png images/library/00010.png images/library/00011.png - images/library/00012.png images/library/00013.png images/library/00014.png images/library/00015.png images/library/00016.png - images/library/01001.png - images/library/01002.png - images/library/01003.png - images/library/01004.png - images/library/01005.png - images/library/01006.png - images/library/01007.png - images/library/01008.png + images/library/00017.png + images/library/00018.png + images/library/00019.png + images/library/00020.png + images/library/00021.png + images/library/00022.png + images/library/00023.png + images/library/00024.png + images/library/00051.png + images/library/00100.png + images/library/00101.png + images/library/00102.png + images/library/00103.png + images/library/00104.png + images/library/00105.png + images/library/00106.png + images/library/00201.png + images/library/00202.png + images/library/00203.png + images/library/00204.png + images/library/00301.png + images/library/00302.png + images/library/00303.png + images/library/00304.png + images/library/00401.png + images/library/00402.png + images/library/00403.png + images/library/00404.png + images/library/00501.png images/library/10001.png images/library/10002.png images/library/10003.png - images/library/10004.png - images/library/10005.png - images/library/10006.png - images/library/10007.png - images/library/10008.png - images/library/10009.png - images/library/10010.png - images/library/10011.png - images/library/10012.png - images/library/10013.png - images/library/10014.png - images/library/10015.png - images/library/10016.png - images/library/10017.png - images/library/10018.png - images/library/10019.png - images/library/10020.png - images/library/10021.png - images/library/10022.png - images/library/10023.png - images/library/10024.png - images/library/10033.png - images/library/10034.png - images/library/10035.png - images/library/10036.png - images/library/10049.png - images/library/10050.png - images/library/10051.png - images/library/10052.png - images/library/10037.png - images/library/10038.png - images/library/10039.png - images/library/10040.png - images/library/10053.png - images/library/10054.png - images/library/10055.png - images/library/10056.png - images/library/10025.png - images/library/10026.png - images/library/10027.png - images/library/10028.png - images/library/10029.png - images/library/10030.png - images/library/10031.png - images/library/10032.png - images/library/10041.png - images/library/10042.png - images/library/10043.png - images/library/10044.png - images/library/10057.png - images/library/10058.png - images/library/10059.png - images/library/10060.png - images/library/10045.png - images/library/10046.png - images/library/10047.png - images/library/10048.png - images/library/10061.png - images/library/10062.png - images/library/10063.png - images/library/10064.png - images/library/10065.png - images/library/10066.png - images/library/10067.png - images/library/10068.png - images/library/10081.png - images/library/10082.png - images/library/10083.png - images/library/10084.png - images/library/10069.png - images/library/10070.png - images/library/10071.png - images/library/10072.png - images/library/10085.png - images/library/10086.png - images/library/10087.png - images/library/10088.png - images/library/10073.png - images/library/10074.png - images/library/10075.png - images/library/10076.png - images/library/10089.png - images/library/10090.png - images/library/10091.png - images/library/10092.png - images/library/10077.png - images/library/10078.png - images/library/10079.png - images/library/10080.png - images/library/10093.png - images/library/10094.png - images/library/10095.png - images/library/10096.png - images/library/10097.png - images/library/10098.png - images/library/10099.png - images/library/10100.png images/library/10101.png images/library/10102.png images/library/10103.png - images/library/10104.png - images/library/20001.png - images/library/20002.png - images/library/20003.png - images/library/20004.png - images/library/30001.png - images/library/30002.png - images/library/30003.png - images/library/30004.png + images/library/10501.png + images/library/10502.png + images/library/10503.png + images/library/10504.png + images/library/10505.png + images/library/10506.png + images/library/10508.png + images/library/10601.png + images/library/10701.png + images/library/10702.png + images/library/10801.png + images/library/10802.png themes/monochrome/16/paintbrush.png themes/monochrome/16/open.png themes/monochrome/16/edit.png From 91f8157f033c6df10ece8fc16bafdca29d97d2c1 Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Mon, 24 Feb 2014 14:41:05 +0100 Subject: [PATCH 38/45] Renaming files to change order --- companion/src/images/library/00001.png | Bin 353 -> 2331 bytes companion/src/images/library/00002.png | Bin 2331 -> 4365 bytes companion/src/images/library/00003.png | Bin 764 -> 2971 bytes companion/src/images/library/00004.png | Bin 0 -> 7521 bytes companion/src/images/library/00005.png | Bin 451 -> 209 bytes companion/src/images/library/00006.png | Bin 3469 -> 209 bytes companion/src/images/library/00007.png | Bin 3760 -> 209 bytes companion/src/images/library/00008.png | Bin 3485 -> 209 bytes companion/src/images/library/00009.png | Bin 4665 -> 209 bytes companion/src/images/library/00010.png | Bin 3727 -> 353 bytes companion/src/images/library/00012.png | Bin 3151 -> 3469 bytes companion/src/images/library/00018.png | Bin 0 -> 3760 bytes companion/src/images/library/00019.png | Bin 0 -> 451 bytes companion/src/images/library/00020.png | Bin 0 -> 764 bytes companion/src/images/library/00021.png | Bin 0 -> 3151 bytes companion/src/images/library/00022.png | Bin 0 -> 3485 bytes companion/src/images/library/00023.png | Bin 0 -> 4665 bytes companion/src/images/library/00024.png | Bin 0 -> 3727 bytes companion/src/images/library/00031.png | Bin 0 -> 1040 bytes .../images/library/{10104.png => 00051.png} | Bin companion/src/images/library/00100.png | Bin 0 -> 2294 bytes .../images/library/{20004.png => 00101.png} | Bin .../images/library/{20001.png => 00102.png} | Bin .../images/library/{20002.png => 00103.png} | Bin .../images/library/{20003.png => 00104.png} | Bin .../images/library/{10030.png => 00105.png} | Bin .../images/library/{10031.png => 00106.png} | Bin companion/src/images/library/00201.png | Bin 0 -> 1654 bytes .../images/library/{10011.png => 00202.png} | Bin .../images/library/{10007.png => 00203.png} | Bin .../images/library/{10015.png => 00204.png} | Bin .../images/library/{10094.png => 00301.png} | Bin .../images/library/{10096.png => 00302.png} | Bin .../images/library/{10070.png => 00303.png} | Bin .../images/library/{30001.png => 00304.png} | Bin companion/src/images/library/00401.png | Bin 0 -> 1627 bytes .../images/library/{10036.png => 00402.png} | Bin .../images/library/{10038.png => 00403.png} | Bin .../images/library/{10039.png => 00404.png} | Bin companion/src/images/library/00501.png | Bin 682 -> 863 bytes .../images/library/{00601.png => 10001.png} | Bin .../images/library/{00602.png => 10002.png} | Bin .../images/library/{00603.png => 10003.png} | Bin companion/src/images/library/10058.png | Bin 337 -> 0 bytes companion/src/images/library/10098.png | Bin 863 -> 0 bytes .../images/library/{10085.png => 10101.png} | Bin .../images/library/{10088.png => 10102.png} | Bin .../images/library/{10090.png => 10103.png} | Bin companion/src/images/library/10501.png | Bin 0 -> 682 bytes .../images/library/{00502.png => 10502.png} | Bin .../images/library/{00503.png => 10503.png} | Bin .../images/library/{00504.png => 10504.png} | Bin .../images/library/{00505.png => 10505.png} | Bin .../images/library/{00506.png => 10506.png} | Bin .../images/library/{00508.png => 10508.png} | Bin .../images/library/{10083.png => 10601.png} | Bin .../images/library/{10092.png => 10701.png} | Bin .../images/library/{10093.png => 10702.png} | Bin .../images/library/{10026.png => 10801.png} | Bin .../images/library/{10027.png => 10802.png} | Bin companion/src/images/library/300011.png | Bin 2821 -> 0 bytes companion/src/images/library/30002.png | Bin 3381 -> 0 bytes companion/src/images/library/30005.png | Bin 2395 -> 0 bytes 63 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 companion/src/images/library/00004.png create mode 100644 companion/src/images/library/00018.png create mode 100644 companion/src/images/library/00019.png create mode 100644 companion/src/images/library/00020.png create mode 100644 companion/src/images/library/00021.png create mode 100644 companion/src/images/library/00022.png create mode 100644 companion/src/images/library/00023.png create mode 100644 companion/src/images/library/00024.png create mode 100644 companion/src/images/library/00031.png rename companion/src/images/library/{10104.png => 00051.png} (100%) create mode 100644 companion/src/images/library/00100.png rename companion/src/images/library/{20004.png => 00101.png} (100%) rename companion/src/images/library/{20001.png => 00102.png} (100%) rename companion/src/images/library/{20002.png => 00103.png} (100%) rename companion/src/images/library/{20003.png => 00104.png} (100%) rename companion/src/images/library/{10030.png => 00105.png} (100%) rename companion/src/images/library/{10031.png => 00106.png} (100%) create mode 100644 companion/src/images/library/00201.png rename companion/src/images/library/{10011.png => 00202.png} (100%) rename companion/src/images/library/{10007.png => 00203.png} (100%) rename companion/src/images/library/{10015.png => 00204.png} (100%) rename companion/src/images/library/{10094.png => 00301.png} (100%) rename companion/src/images/library/{10096.png => 00302.png} (100%) rename companion/src/images/library/{10070.png => 00303.png} (100%) rename companion/src/images/library/{30001.png => 00304.png} (100%) create mode 100644 companion/src/images/library/00401.png rename companion/src/images/library/{10036.png => 00402.png} (100%) rename companion/src/images/library/{10038.png => 00403.png} (100%) rename companion/src/images/library/{10039.png => 00404.png} (100%) rename companion/src/images/library/{00601.png => 10001.png} (100%) rename companion/src/images/library/{00602.png => 10002.png} (100%) rename companion/src/images/library/{00603.png => 10003.png} (100%) delete mode 100644 companion/src/images/library/10058.png delete mode 100644 companion/src/images/library/10098.png rename companion/src/images/library/{10085.png => 10101.png} (100%) rename companion/src/images/library/{10088.png => 10102.png} (100%) rename companion/src/images/library/{10090.png => 10103.png} (100%) create mode 100644 companion/src/images/library/10501.png rename companion/src/images/library/{00502.png => 10502.png} (100%) rename companion/src/images/library/{00503.png => 10503.png} (100%) rename companion/src/images/library/{00504.png => 10504.png} (100%) rename companion/src/images/library/{00505.png => 10505.png} (100%) rename companion/src/images/library/{00506.png => 10506.png} (100%) rename companion/src/images/library/{00508.png => 10508.png} (100%) rename companion/src/images/library/{10083.png => 10601.png} (100%) rename companion/src/images/library/{10092.png => 10701.png} (100%) rename companion/src/images/library/{10093.png => 10702.png} (100%) rename companion/src/images/library/{10026.png => 10801.png} (100%) rename companion/src/images/library/{10027.png => 10802.png} (100%) delete mode 100644 companion/src/images/library/300011.png delete mode 100644 companion/src/images/library/30002.png delete mode 100644 companion/src/images/library/30005.png diff --git a/companion/src/images/library/00001.png b/companion/src/images/library/00001.png index 0218d0570a6be5207e3bba6c272d9f3c45af1b6d..43cd387dc7b790ab437796d6464fd402a305adfa 100644 GIT binary patch literal 2331 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 literal 353 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 delta 2294 zcmZvedpOhm8^=deB1Ds#sXYuM=TuH9eul|ua{4AEkyA*qw9<-75jo_zP&{p!GqoIZ z%BE*BQPZ&GxHOw(W=TDMd!DP`f4@KP&vjq-=lZwQH>t|Y?w($GAp-)*63`BI-ic$pM{eOe+;-76 zRL?$rkq3F9W;gNUrjy&%9S-RBFMYl9z!q%q_>i{XU@RW zG;`h{9334WbFJb7Y5o1OlF|VKro~ZysG#t1wH-dYckMcAR&)z4JMe08Wq;?#7Nt^7 z^x;$>00WT+t8Uw@(GdmYYaA(HYtok|#9(Qufq?-?^riWM-Sl;KbDS2HN=;iGVY35Q z z?8!KYH4HH;a)56~-XjpnSVyzs z4S}{tp=6pMz2q97b}dvA!C8=TGw2T7=AJ6ugxpE!76r#PhCe$4)Jsbt-?o59| zCd)PWZzCLvJ;zjs!CwDb7atZ~(^i8-&3lkWC?}C9Oku67Ud>-F+7T1($V5}2_=hMe zJ|V%hE|%3OQ&UsZd|^tuX;AXmxF0JKv%<9(hDhf9B4@;TaW}c`A*(P{H4QMb+m1Ie zG4b@AH;%MQIN+z*`{e@yWw5iCix`29KXe-^kLAN$oE?| zyVboZ)P}J?SE~=)7dO#3p@+_Koq=iP@qK%GoBc{T8XYrv=WsYE$-SgUATVLp8N=@Q z2IE9uRZDHIOrwp@zU9pkI^DF3@UCX;CtllLIU|Ch#;qkThja*D2L9H6|G zThC3$5YG1tCJy!M2+h&h(YkKfE#LBPr%PQ}G z+C87RC0%7y6-yHPohPIdkZHk@3Y%`;;3W>cX=*vJ(0rR62muKeS^L}Z*Vcwd_ISRL z=__6>dJUP^bcsx`9uAty^i?vsxb<2wk(G9JpxWag!H^p?Vy=+w9D)*Whc2#r4ix6( zq^VTbDy913h0k45uV>-{5|lKoZuuL`vnJ~ejLJ-(0ZrNrq5R*T78^>b2By3DW06i6 zh~IQqUrfDUV22yw;8b6_+Q<4cDZGOk8X6xv@kfAXeMcG_@TPe(3?W4g@z!9>Me?Ed zTQ)wlhtD zIrO~a-_7IG^r)FJO^vXL0W;!A1cU0P>rv_;ksKi|EKFC(NM2v%^>$np_s<2mB2)n8 z=WIkJK3wJOi`MJ(gpo#8HJ4uzU~X>iU;4|$(()dkAG5N$YQ}wZ1iy!tsi9?8q)6fvS)VkB1g(4gd zSD(Q3Re8ud50$$;G&BT4=g2jBIR+V`RiJn%bi3Sb8|(Gf+sYn>GRCBSYisLw@87>} z|9g(EW|JrYfdn%&rFbmXjLRGytss$Tml)5E1MEHvk#m0N$Zx4J-3>?QG4FHcof)gKZ8Fj%Kc#&YBo6%|iV7!u{@{KzAF?;`7K zpITS%j=WztPb-Acx|hUlP(LGEsmrF=!4i{ZoG9{LQldwh?F*a3l*-DjlIcx9KPB2^ za!2b5L@)KyA3I?F6gC&&?TiWn>R0E*>wzBj&Dzf-fFSqCxgl0E7`@xPzm^ew5{Jal=AvsgMZ>*7sj<0E(D!= zshE_Ml)t4d>+xNmV}5>WSl(DDz>(Zf@i2m_tMB`2#sAoFrgs@sh##I4j=l4(`oPm_ zcLF57zM((6{IA#lHuwK|y(9qq&I7*#z(0B5cTaiN253C?#81wR%ScI-0ijXu4z>0{ G$^Qkmv~u?V diff --git a/companion/src/images/library/00003.png b/companion/src/images/library/00003.png index 9f3c5d78e040bf7ea81c74d87f2edabced38ae62..a179deadfdc73cbebacd24e1dc58b38a9ba9eb25 100644 GIT binary patch literal 2971 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 RR#E@}002ovPDHLkV1mg7tjqua literal 764 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 YrWpxnLoMrrGgAmoK~4URtXbgy0Hqy2mjD0& literal 0 HcmV?d00001 diff --git a/companion/src/images/library/00005.png b/companion/src/images/library/00005.png index 6d5a1d93d4cad3c168a2a5f0f46cd67c9786d9f5..802e9885a8d41bc2573134d0c875e5e07a120834 100644 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^SAf`o14uBqJF!g!Qk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T`D94;$Owbqp3jA<+`oh!W@g+}zZ>5{8h(qQtz+Vg=9K#Pn2YAJaCV0)I~z z$B>MBZ_hLGGB9v3FUbCXZhLz(o6qO-ZeFAVE%r(G8SAxEHyZ+tX7F_Nb6Mw<&;$V7 C>o;ov literal 451 zcmV;!0X+VRP)M?s9>M``&~-il000McNliru-2?~@A}>_EeGLEr0Z>Uq zK~y-)t&%ZL!$1&4*K*+oVdxRLM%*M6T!A`g2u)-O;oN{43B@hq3N+i&;1eK+3m_*V zB$ga6e>~1=$4-O9uSQQVKeM}5>Yp+&O^UyO<$a)sr33WHm*C-Yn(bl-q>EUB@q3(= zkpNR2N#N_~QGg&T-vme`NEZN~Vvi2cqeMq5ah48nPy2$T4AwOFjc24a3Yw31JSlY& z7=3FyE|fa;&0H9vXS}s*gsS$WF|U0#u8>I;8hsZOH1nna%VFqj%D_1bKyfx;;~Jrk zof?1BYz+W5&JpUURI;Mk8nrUA!+1t^0I+d`O!y}onyrCSY2a_AVfQ!~SX~!;$ zU_-Mta6xR$5bD4cZfUlLz4b!}fas|4P;Ahn!l>|+Gn)I~$9`|}oWV9n`bN{y8pk_& t#uw6pADSCO^XD2g#%m|abkcOV`33v%2Zo%LoI?Nr002ovPDHLkV1j1%y88eC diff --git a/companion/src/images/library/00006.png b/companion/src/images/library/00006.png index 64eca2f6622431d42cc2fe98cc671ec54334e97b..802e9885a8d41bc2573134d0c875e5e07a120834 100644 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^SAf`o14uBqJF!g!Qk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T`D94;$Owbqp3jA<+`oh!W@g+}zZ>5{8h(qQtz+Vg=9K#Pn2YAJaCV0)I~z z$B>MBZ_hLGGB9v3FUbCXZhLz(o6qO-ZeFAVE%r(G8SAxEHyZ+tX7F_Nb6Mw<&;$V7 C>o;ov literal 3469 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qf*Zs5hX#1CLR`=Ysy8gRJ$k9D1HV7KUGkyqwI>m8@}dqp{&Z|7^4S@O9&ev2rN zV)n(_9m*RMoxkzO3bRHW*jns2Z|xkA1@fA+rNF$_uczjRP5ndetVU-MOv$` z`UFM>=J%*p$~V}1On zC3`zAn+hwS0lBFqi3%0DIeEoa6}C!XbFF}Ekg&dz0$52&wyjcxZ-9bxeo?A|iJpm` zfv#&sW|@(a9hZVlQA(Oskc%7C2q4c^DWjyMz)D}gyu4hm+*mKaC|%#s($Z4jz)0W7 zNEfI=x41H|B(Xv_uUHvm1jG!N)Z*l#%z~24{5%DanTbjHr6smXNP z3=ITeaOi_%^bPe4^pTa9WTxRz4w6AA2Whqn$gD`siEzoxP0cF?I>A=S(8vO87(zA@ zN!H8+ED18m$}=}HJvBTtr6dEW3r*M~H8VW}=nbHHeNbrWLxT$#`ugzT2ZaIc!Kfu9 zh4E-`jRqGTqK16Ns32P*U$(!%{4%=Ohe9m%cXFEE{NwI@_$E&K--4*9s zRxL1MGoKmfqi1$?Y2>xpA4?y}MsAH;duUfw?+2OOgI@XuEuD{wxmO?#~Z5CC-UzwmK!ps??>sbwl>aEW4!)Yp2?VUc7Yc z6NkL{Evwr8dgW(R|2eJR$PqdBb2#6+m@bxulNyY2?xwC#(%o|Jwm64a{_mIEl||e3 zNKaW9ohhdx7@F@Kw_HR0msCNOapkWzZKsPlr-azIyQugw-<+hhYVAyK8IOky>~?D( zF0DS_`a56i(BIz8Uf&d+exG>Q!aLf)@sCEq{fEL^-f;ImPCD>};ndkMUJjw0bI%#G z!khY1U5bi1_8Ri#wU*y_dQ?bYiTl!`&GC)iQ(p?P+ed0dZ8c_$i@s-+D(sl=vVXsW z3df(|fcV*Lu2(k*xm;$JV`bVmakNrEbpqyAOD_jerbdfXXdH0f8LW> zk1vcnzQ_56vfc4&X2w@x-XZ*QjsH$bCCuFV(Es*-e(_HqQ*J-W-r&AW;a29KbXk=K hmJ7(q&+O(u20lU0^PNAp%mk)u22WQ%mvv4FO#qlUGS2`2 diff --git a/companion/src/images/library/00007.png b/companion/src/images/library/00007.png index fa384d1e69d6717e7dc37c1f73537364befb0c16..802e9885a8d41bc2573134d0c875e5e07a120834 100644 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^SAf`o14uBqJF!g!Qk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T`D94;$Owbqp3jA<+`oh!W@g+}zZ>5{8h(qQtz+Vg=9K#Pn2YAJaCV0)I~z z$B>MBZ_hLGGB9v3FUbCXZhLz(o6qO-ZeFAVE%r(G8SAxEHyZ+tX7F_Nb6Mw<&;$V7 C>o;ov literal 3760 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qf*Zs5hX#1CLR`=Ysy8gRJ$k9D1HV7KUGkyqwI>m8@}dqp{&Z|7^4S@O9&ev2rN zV)n(_9m*RMoxkzO3bRHW*jns2Z|xkA1@fA+rNF$_uczjRP5ndetVU-MOv$` z`UFM>=J%*p$~V}1On zC3`zAn+hwS0lBFqi3%0DIeEoa6}C!XbFF}Ekg&dz0$52&wyjcxZ-9bxeo?A|iJpm` zfv#&sW|@(a9hZVlQA(Oskc%7C2q4c^DWjyMz)D}gyu4hm+*mKaC|%#s($Z4jz)0W7 zNEfI=x41H|B(Xv_uUHvm1jG!N)Z*l#%z~24{5%DanTbjHr6smXNP z3=ITeaOi_%^bPe4^pTa9WTxRz4w6AA2Whqn$gD`siEzoxP0cF?I>A=S(8vO87(zA@ zN!H8+ED18m$}=}HJvBTtr6dEW3r*M~H8VW}=nbHHeNbrWLxT$#`ugzT2ZaIc!Kfu9 zh4E-`jRqGTqK16Ns32P*U$utUq8EKqtpj-^DjP|2ULIUp84hv*;z?pGpR!aK%+GE5bcqtFKbOWH&3+i!rr9 z=1kb-Lhf~%^Zi1)FPvt&Vsq$iLuCDqju%VLaP_kK%s)E6Bc`|HhxmDpBYbVzHEFu1 z^y?<*)*pN+r*Q7Y;*;CT1rJo?A4_lKu6*?T@Ypf6_cUv!Y)5 zKy9Sj8~4uH=fW=b@s+V{U2wl6{0}qBh4}?53jg+Rwbjhgp7i@S*Mh{P*jveUIbi_~ zkFMyx{3A9wC(!Ei+f&-DE59}c$-hsXXl3)(!DVN}?)~8z0lOn_u6M}QzEYp%xc%n6 z-N(;g2tVt>6m4^C=Tpt9Ccmw0A1}zPDg3=y+mKJ-y?w~?BR20p7zGwMo(y8>Vp5MN z4>tc}6so*oM+&R2oYaMYG|fp(H9vV(Sw8NN{IA5*UU5wC>g{*EMSoR8ooDuk%~$^u z^L*d&+Xo)b`dK3U%u;Es@STP3lfK8jdNYGZ`3u9w?N5!~YGnmy+?zTp{Xu;n_?o?bCe^KC4Rt~2zzdPHPd!IInRmZjVF9j(>&t2{8#g5O}{jvoalY+~cv zmD^_cv48(+J^fz6k@p7myx-?{EohTc^O|vR`DM)mNk67{%0}=Ch5k^|G#B~vE9|#v zG1tr5?(cKz($c*>chCJ+fBMIZfW5zG<>n|d2(R6~Y8H$3L9y@5-}sCF_Wj>2FHkF1 zSp93a;ic=xohn_c4o->BRGlVoAM>T9?s`bLUD&ZbhEwjTNCa^)6|Cf$v#I`H+RtCz zuQP*^v>VpEUU^tPGilq2S(nP*`EHmvX^HgqzWFnhCY`+Q`A+`eFLA$}S5E}7iU+cZ zXq9~bWv=V$lOJmvIBQP8UXDlV{2Lftf9%K&uiMbOFOoa!UgZ17cl2<5{8h(qQtz+Vg=9K#Pn2YAJaCV0)I~z z$B>MBZ_hLGGB9v3FUbCXZhLz(o6qO-ZeFAVE%r(G8SAxEHyZ+tX7F_Nb6Mw<&;$V7 C>o;ov literal 3485 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qf*Zs5hX#1CLR`=Ysy8gRJ$k9D1HV7KUGkyqwI>m8@}dqp{&Z|7^4S@O9&ev2rN zV)n(_9m*RMoxkzO3bRHW*jns2Z|xkA1@fA+rNF$_uczjRP5ndetVU-MOv$` z`UFM>=J%*p$~V}1On zC3`zAn+hwS0lBFqi3%0DIeEoa6}C!XbFF}Ekg&dz0$52&wyjcxZ-9bxeo?A|iJpm` zfv#&sW|@(a9hZVlQA(Oskc%7C2q4c^DWjyMz)D}gyu4hm+*mKaC|%#s($Z4jz)0W7 zNEfI=x41H|B(Xv_uUHvm1jG!N)Z*l#%z~24{5%DanTbjHr6smXNP z3=ITeaOi_%^bPe4^pTa9WTxRz4w6AA2Whqn$gD`siEzoxP0cF?I>A=S(8vO87(zA@ zN!H8+ED18m$}=}HJvBTtr6dEW3r*M~H8VW}=nbHHeNbrWLxT$#`ugzT2ZaIc!Kfu9 zh4E-`jRqGTqK16Ns32P*U$qaB~dlF31b%G-9GvJKIn z!zg;uzNpg9nS*o7nnPQ}9_Pz16c^flp3RcY=2D~7ui_W4@~f&&B;Q=#l&OAal9YXPdxjBi%9pNsypr{Bs4eophB~6Hs|+iif?Dcu3(Q4O?hJ=%wVxI z>ql|R)1wm`CHP;ox_b&r@Mzw9!~DT7rtaSeqf86=qcmYSP?t}%C`))jc z*s!ijn7zj~;rQBDX_uJ*w7P@Qzjq1aifd~gc7M+`U&|1%b@q=%@@;bj z&aL~W!()=|T-a;k|5sGCuYFso+<}5~0&Vlw&RcYCyUhCwDLkR>=@MLNH_Vld{eQST zUcKwqPJ`I!`}G@YBp4$9X3E`|Sf@SZ<(!APGZ`2AU+GYlu85aSYwG*Vvd1iXo?Y<7 zgC~@01sS+Q8gBRa8f05e{mo%|^DVQfr&1E)@<(j{1wIz8VXKIKH&NAjKPB89w=GfzV(fr=l#k{znt?=g8DF?u6{1- HoD!M5{8h(qQtz+Vg=9K#Pn2YAJaCV0)I~z z$B>MBZ_hLGGB9v3FUbCXZhLz(o6qO-ZeFAVE%r(G8SAxEHyZ+tX7F_Nb6Mw<&;$V7 C>o;ov literal 4665 zcmeI0Sx^(%9>yD#EwYK=5QinkK@chI`c+0?=%wT=Uq=XE~xN^#7L|=(-{{IqtU4ZQZNW(M$kYQ$RZH{ zfHiR{%?ol5C2acfwAmGuLE(M6HK{To7+ zMdkMixOX-&?0>G#wQ{vnJ-)HP=auw!4Qbc5DYO6ipoHNM%XHPsN48ELPSjMT2*tQ_ zXE$3<#u$wsh4ytso&W%mmn2?A?sm2qe<~S)!&Ci01dB}Ll?niQhAbM+KL}*P{J;Pb zMIZk9W(OQb!t2A`wCqrJG!u|WvW%pIE|KllS`XeZ*|8Kxk^pH8AN zNmL4KCllvK4Q1-X;XEDoIedryU+EOaX9zqT$Q=c#jzA&*ZfBAR|HZzee6jB=#yFB# zV6eL>i40O0yb|=`>KZzq!oH{;e^a$JKZ!d*7%MU^0CXeanMB^I|CqJ}NdZLOXYl;U z9a_lGxOnuDf8pO@@V`I4z2vJHf5Y_+*H;nvD)YD9^$pio5%?R;-JnwkV|f4q_-6iD~Z zh%8^0)xp{+gmnqd{#cwnma(d1K-a%M)OI3DPvI9%yN|bt_eaBXf4slTR7~&DO$4A@ zmw;{PcdPqa6)6UypmNVuM(A;hDv|Vaulu20Gwck-Sy74p07N)58&Dpog^t`kC znpd1VHwE(7dgXLky&;PYg?wX~+}PSclC(%OYg+YCI_4g?1hWBWlMunCV0#hjnXOj z?viS!Q^AP0^xZe@4;RPBjmwIB-P#iJW@k*T3Pq`&%8fI>O)bRBNS^e4puyHcJq31O z{wc7NsDLOIHmXrMf7VU6oBdXw(gbVL@_) zn5u1X*J)Cj2EUSsa1PgjUGq_m3mE-eTRXCH(Bu2?ighJPovgjm{*mnmg`{6gvHP5& zA3hO5%dM$w9>iX>^$@)@A8UT<2(!hNhQ@d*HBN(+FF%B$EC|5!b6byjCIk z&`zn~Ys)>p*p{{OTQLPu?#{8|`ZcxvR*6HWXGYKUJ=>M!0C9&2T$3_sIS)Dw6bHas zCt-kq!O^$QNUR}ywhlcHyyqh_!uste3j820XQroaxsLY~DBKRcyQS^er9^Bj*%Qj) z-n;z_J2E?J7D4Eda~Mu+7)Vo5-?)fUb%||>oiWTyE^mE8mvU>BL~ydDw1gmcK>ONi zjYsS3Aw14LZYs=$PhcqTl-~a7j$=edW=K>U)u5>1PC>&Sn@qU z{j*1?EGO%g8qypm_xdvb+$~vQGf!2=(DU-s{iiPDtst}Bwl%lFfgcw>mzEh4E zIcoBgbO+rmDyBiN)6g4l;>DGZ%g#`vt{%!-8gSK{xKw(p!Nk2BN{9aLDm|v1EZ`=1 z&#P3lCD2vd>S#Z#$KPnt#3`2Hs|>;1AmUFYyIt))>hF~lhx{$Eca9I$4jc$fY;m8S z2uC|S7Rp@aZ&9ke>p|3I+kfQt_qB3}6~Sj86jfFy9WK146x%HXKr87s-A|oIz0Qqz zWZVY`mZV9CpeC}FZ=Tp(^uXjLk3(z_pKX_bzx>8|Sn^IBA zm$2=qs@^Z3YZ4M%^l(gDCZH1B^r-`g7PJ(DVehPT&2sU*TGsuDMx5+S#ZT$Zfi!?N z74(3AOHdZvosy`==@_U=QbS2L;v4x&C+aqSmDqN5nj(!K-DEVRpp}mxJ{&k>tKLoa zllj$WFzKB{Rx{ou=pLFVZraYQowU-MmD5!NV!m-nPKigt~xtI(lR3t+y@aRth=#u&b= XwlJGfv{%5+{}n4Ud(#?Y-?)DPb8?TN diff --git a/companion/src/images/library/00010.png b/companion/src/images/library/00010.png index 2b2081c886fb7876f9221ab4d9f8fcc9cf3ca492..0218d0570a6be5207e3bba6c272d9f3c45af1b6d 100644 GIT binary patch delta 338 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 literal 0 HcmV?d00001 diff --git a/companion/src/images/library/00020.png b/companion/src/images/library/00020.png new file mode 100644 index 0000000000000000000000000000000000000000..9f3c5d78e040bf7ea81c74d87f2edabced38ae62 GIT binary patch literal 764 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 XwlJGfv{%5+{}n4Ud(#?Y-?)DPb8?TN literal 0 HcmV?d00001 diff --git a/companion/src/images/library/00024.png b/companion/src/images/library/00024.png new file mode 100644 index 0000000000000000000000000000000000000000..2b2081c886fb7876f9221ab4d9f8fcc9cf3ca492 GIT binary patch literal 3727 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 KMNUMnLSTYNUeP%K literal 0 HcmV?d00001 diff --git a/companion/src/images/library/10104.png b/companion/src/images/library/00051.png similarity index 100% rename from companion/src/images/library/10104.png rename to companion/src/images/library/00051.png diff --git a/companion/src/images/library/00100.png b/companion/src/images/library/00100.png new file mode 100644 index 0000000000000000000000000000000000000000..12fd5b70f79fceadc97360ddc52f0243e143b280 GIT binary patch literal 2294 zcmVb3q;Ln&up^;Ph#0N)DmtpMK&@T~w}*p$8dOIM?)>pe*_2spH zeMJQL;yNI?HOOCY0qD(FgupKh1QW6(nWZcBLGdLmKL=>dR|LUVEx?WBRx7!a;?L@L z#7}x_V={r(NuyV)ourpnf=MY!OP#wbF2A<5 zH_6!87_C)uKwEb3-XQB7Q79xQZw>zDovb#cuJ{~Wg{wgl2Iwyxs_G2q%y=OUXTWpHy%vU0i#N1FUgYmA_B{@)_WU+;u)PK z)CL<55=vWZrP_}+M#-#@Vg!I;`9&t&VU-VeGnO=b){5^^#r8Y%42GR{q!bvPP+wt@UX2!3XC%ol8`hGzv$B&Ni0S$NttHtV01@ z*S&p|8$9nw*61Uc7-chh*~*O{-NwIFMy0|!#-??QajK(`Iq>4BP&oxZoFQ}PJEz#~ zm91J~P)5mKu>fnwz}^C7yznebf!cfDhhnJhvYqG(gJShMV7`O$T{xd znb-f>{g+qMexGQE&l;|YmjAgF%#PY+nv*UTc94`Z`e2gtE@me)j!Id%h}%{rp)$ww zs(5PRg_i$;1$f%^$x#<(bd6bwVnOgBG~XNVC94lfR;otc{DAe!y0vASBdx0igFDWgCOa zXfW9XzbCzy&Fnr113Cu>tEI_DrM1zZiB>O6DwA5T)Ho^~{l!*iZ|l3DzF8S8-Vl&> zZt;8Xb@pz&(?r*l!5pt#fFfG($pY18S#K4fw{lPz)n>`se!*>4cG_TxA|z6l-1tBD zX0pAqX%_-do#SNk$|qox)qmWEFH+FD`M4a-9>rwY{t~OKKH% z{wJ{H?C8n`?HLw${T$Z^V8A5l+&Sp<+Gp6F{XYc(#gF1Hq9B=fPu|loH zjnaT4P8tKU6KbQRd9iNzAUk}Bc;orC!%F4RjXGk^a~uEQi1niS>Sv+XW3b3dQaO6- zC#?O`jY=}B%*sU*=1>Jg*soVIL+N)cND4#qq|om?JmZb(S;<;QZydt*-q?k5cw&W& z+Cgm$37r*Tsh)~)482hsuPBW!IvcD*yG>zdKh9TH0h(u+J=5wFI*{z#{GuGSV{}6q z_;U?!c+t_=pwgJ!|He_)9|dhWn)w`>G+K3o==n}g=BQ=Xf%h@sJ(M%(wb4*C>82R zB+tp^z1cB>y!28S@I;5h#mA=IA2w~Nc3jSynAMBv8dYu#{^j1vR%>t6EoV`KS{q5! z3l!k;-|L(W*7U)jJ-2rDXcG}?=be?Tc2XGq;HT)LS`N=Ly0gd1;d&TwouIml@cd(* zRz>8R^tN`f*V_nfj+#g%eil=WV1tF>rs14mcm3UHU5Xa<>6% zhlucpkk#iOddy3z@h2I9q|}?N9IwD8mZ()EN=4A(pq3qiIns4m;IaZd`MPOI4z8W~ zWHcTk#{DH|SFgQ%%aK_7LebZ}=!oAU>{lOwcKLzaf3EiX-`|tlFQx=9u|QLZmGKjQ z;P6>8!I$lTF^*6UuQP0QKP5=M^ literal 0 HcmV?d00001 diff --git a/companion/src/images/library/20004.png b/companion/src/images/library/00101.png similarity index 100% rename from companion/src/images/library/20004.png rename to companion/src/images/library/00101.png diff --git a/companion/src/images/library/20001.png b/companion/src/images/library/00102.png similarity index 100% rename from companion/src/images/library/20001.png rename to companion/src/images/library/00102.png diff --git a/companion/src/images/library/20002.png b/companion/src/images/library/00103.png similarity index 100% rename from companion/src/images/library/20002.png rename to companion/src/images/library/00103.png diff --git a/companion/src/images/library/20003.png b/companion/src/images/library/00104.png similarity index 100% rename from companion/src/images/library/20003.png rename to companion/src/images/library/00104.png diff --git a/companion/src/images/library/10030.png b/companion/src/images/library/00105.png similarity index 100% rename from companion/src/images/library/10030.png rename to companion/src/images/library/00105.png diff --git a/companion/src/images/library/10031.png b/companion/src/images/library/00106.png similarity index 100% rename from companion/src/images/library/10031.png rename to companion/src/images/library/00106.png diff --git a/companion/src/images/library/00201.png b/companion/src/images/library/00201.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e6349a3f0c74a46f1690328ff64fcec0518064 GIT binary patch literal 1654 zcmV-+28sEJP)MtqrG5o(cC!|IYz1k$Ag( zdlXR)`@gj7xBT+#A&3=1caW)hip|~8`OF?LvP;K+h(+cpDc!Z%Kcn_}Ma*oVYA#eB zRGr7TyXe^f5Gg}|s#lF_V)k<5tB5~S2*@#IWtU@%WXSYbqhtR%n<vOz5_8vA$B^yvnMdtKk@4~oqObS<=U&7s|% zqvK)#5RE$;035!so)E`j*85pb-1GHS*i=ko{l1^i$pI=>*a-FRyPE~-VQ_$GUL3Z} zb-tcC?q!Oz(yRbus+f2SmHjylvpOoRB*zhrb84D39krhx+^Kq zOROjFsnbl9B%s0L&tHav9=p{U5?Z5mw^>9;C~Sx~DFMPPxDwO?71#k4v%XpIoiO{J<` z6-PHFYHo>_^T7BD9DQZw{>}F7me*Sh154Dj!VQ4{bCm39Y50T?5b9o3PR)zHg~L?_ zfWxorjn2>@y2i(|&{IOd7gp(jJ~?`JRJ==>?uMpa+QEdjg}|b`6CxNie><8h$)bYEuS;yw5*y7I3f8 z$>rr5*0oengNkbxhQ)_AUiSwPXb%_J_g3td&SifL0D7I+!~1P_$jJt6Jg(V;bv|5> z-v&V6It+dHE{P)@1A1EL)$5D0e_(GLp}@vh$mS(w-IIioR^^PVdmRTB7W&1lK0D0N z6S^Ils}#w*wt*|MW3Z3Z@r3|H3yZQ|9(^oFeKm?T~Gk+3nZjCSW~)1O@ag|sGER;SCbm-U%IINo1R9{!Qd*Y z-Ks1Pia=JBxO5nKoCS~E>(4^ z>eT6(kdlA&id-FVb->jDR|i}jaCN}d0apk7n5!1Fk9=SLh(?#@9Nk5F@_&Db6;PT$ zk$?a2DG;m$(MFIYqa;b6W&U@DfS}Q<4IrH;UA_ZwQz-S)S?a~JtXn%Nm#TMWZtN|B zXb~);LzLGq?-X2Fcp)%rzukx(0+yLj0vKhhq|ST3t?nbGzTU5fC24IX&U= z+K9zU!tj~2<)|V-2U81%j8}d_j8(8TP}2f)o`dlfqsSq%))7Bo6q}2&KRMtWzosN(s^W z8N0wU3_~q~!7A5}(X%{Ap9eYHBtBH3kJ)ms01P6srCH&z(| zNzw^A{F$NJ>ji_9Tjj^4kf0Wh+1x4Awvyi^lPK9gIAViYAxV#RnX@{eaxYogN%{}! zz>Nl@R)ZIqRDxiAyrrNLY(znA&=@6KlLBj^@rFnxo6pqh$R|2#7)!JPOH5 z$VD#YD5spu(Hk3$d!14zSWt=PoXy)zoEEiT1)Uv&-vrx_820;r%40&MCur7L5OAP3 z2U+XTo*KPIM~*qGoUxVhL4;zi6thB~N0~)q(&!|??4|oB8N?EnYluf&sN$?IcCM7${F|es54`qZaX)3PDn;jMi!t8Tug` zyJ#e{9*yz=h!0icYh;u32m;E}=l)uk;~KFht3M$}y!6&jwnF}v!g8G5Z97uk%1#=T1K4oxh}$ zG@_l2Sz*>1^)@Ea$`;S}!14)-;70GiR&KJoGaD@mi&10LTG?5=%3$AkZLKj$cJ39& z3gUZ3Ku}uDN^jlfT0qJ!=u`^9XcRSBu1cal&j`-EKX_(Qw2+J{!Op+jWxcQs#}d*`l>r1hb^g z15^EM7&ybez+Vj+t@G2GYhxaFJ8c#%XXS<2-&ys5>PUeP{*C$XgGfS9^l*USFBHI^gPns{{Vg Z>;Jp4bt4A>%Rm4C002ovPDHLkV1k!Q|9AiZ literal 0 HcmV?d00001 diff --git a/companion/src/images/library/10036.png b/companion/src/images/library/00402.png similarity index 100% rename from companion/src/images/library/10036.png rename to companion/src/images/library/00402.png diff --git a/companion/src/images/library/10038.png b/companion/src/images/library/00403.png similarity index 100% rename from companion/src/images/library/10038.png rename to companion/src/images/library/00403.png diff --git a/companion/src/images/library/10039.png b/companion/src/images/library/00404.png similarity index 100% rename from companion/src/images/library/10039.png rename to companion/src/images/library/00404.png diff --git a/companion/src/images/library/00501.png b/companion/src/images/library/00501.png index 51e85006a8615d554c0b7be062363b33b088ddc2..44bb7ad5a8361da7f343a8d0aecb47e151b015a2 100644 GIT binary patch delta 821 zcmV-51IqlW1>Xjc7(WOA0002@y&$6i0007FOGiWi|A&vvzW@LL32;bRa{vGf6951U z69E94oEQKA00(qQO+^RZ0vHMdF?{JQz>^ySBYy(VNklZsc767Xn0lz?G3nS?a!UZV+1on`EK$u^F#~Isk0P?sFAA^({#`jGji!}?XtP0%#$$A+= zjP$!?n~DQu1jn|01MI=isd;}=Gu+Qz?*Y_XLnUT%;VNPPHF@jhxz^qa0=#M>^2Ht= z#&o&`;CN^F&~40QAdwn86@-^V$HEDVdVi{11Gq)}LIEf~m3oxz=)i1K)7n-GutNc( zN|HHb%hN(p1tV1{+RwSn?hp|-(lLOn%)>*G!(ePshf8OAZop!i*e!G!ER1CbJFU)= z2cHnYHOr68eAwww-DG!(FAK+=Ll6@q^bbL>7i1Jb+Zfoiq--((W{f-ljg^-T27fTA z?13}{0HEp$r`)6?d9Ey3t{tfnYN5#$Pk^9mosXPxG9n%^P+orlg0gKurmK)lmd1{7C0vhyM$^45>*vBrXxqDc%24! z5{;%Mo9iou$8gU|RiwB!*~0mZ#eZIQF`Tb1K`Qs14Hd&X`_D@bD6`qegNR|$6R7qn zp7e9!OXh@7@~J*RQ)?;aPWw!-ZJXcf3ddmsn<0=zLpH?)(7MFPZxn`8pK%ZzyFhjD zC&%^PgTMzV-*-XYmdic(XKJhf_$a>j5j;8Ya=f*P@U#cw7JX4ZeANR>t!jXKVd8@O zw1-`Q`nz+>!xZ>)eJ3YRQ?RnozT$k`1HVVUX!1(?Cjft^PEDKe6#%~@^<>7j(Dj8F zm@7ESKAMlG;hYX=-T=|Q=z(FdX7M{Snwk9oAJQ^lZ{=M400000NkvXXu0mjfs}Xbi delta 638 zcmcc5wu*IvL_H$|5d2!}bO}gt7I;J!Gca%incNJFPt4cuXJBC5>FMGaVsSe5vUT1a z0|B-Ni4qPkZ{#ILgnMKjV62!bb1=1w;nJbj^+#RxobD%hiJ7Q>=GV*&*AiRpFY^4L z;K}JWF)B856?O}&M9C#CtzeobfAD%i)3fi^wJv8*me%h+FXv$R_Vh`GCxY9B&N7@= z&NEvf9`1JM$)_a-m+uRf&+TGg@;q){-hGCN&GOY<77kx+1!MI&72aKIX3=3X&vL zWaypvW!c+&Sqb;e^=f}Z9pnRBEozgQeHq_&m2dEHbT&WnYr;wX9~T(7X0Gv_%s6ZI ziMJO#nAiN4`_CY(kQcz%@}0+yaot?Ty&UBZv&0`UNqjhF&lka?$979W^WuZlcB^cb zXZGwYXBGK1xO_L4%zql*zJj&F^PgD*a!9z~x$xiJyY6}vt zZTDaNBD-g=*@|m!mJA0A_pmRi6JTHPzKFkS#zVm)r#avJ;&=1iF7W?keLXNnMM_*F zN*qf|GV+TU98-!i6Y~@tbCcLpi_+`z!=omKE9Wq%f|R5rmZVxG7o`Fz1|tJQBV7YS zT|?6lLo+Kw6Dt!lZ39Cq1A{AbWxoN|gM2TZ*Nk)DVgJVijW@4U#V{TGvQF>i|coa}x6eRDQpPQSSSAwdbKhxs? zP=P8)K}upts#S7PDv)9@GB7mKH89jQGz~E{vobWXGBMLOFtjo-xH4Dv8;XY9{FKbJ XO57Tj9$4xH)WG2B>gTe~DWM4fs_bf# diff --git a/companion/src/images/library/10098.png b/companion/src/images/library/10098.png deleted file mode 100644 index 44bb7ad5a8361da7f343a8d0aecb47e151b015a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmV-l1EBngP)*cxD-UmK)lmd1{7C0vhyM$^45>*vBrXxqDc%24!5{;%Mo9iou z$8gU|RiwB!*~0mZ#a?zXoUblHD)*fY6~jCG&r1#{v)RXkh+)zbsP-wI^mE}$=7do4 zsXjncYboYV`%JKHo8RgR$6*7TA&^BwHpKJn4002ovPDHLkV1k75e2)MC diff --git a/companion/src/images/library/10085.png b/companion/src/images/library/10101.png similarity index 100% rename from companion/src/images/library/10085.png rename to companion/src/images/library/10101.png diff --git a/companion/src/images/library/10088.png b/companion/src/images/library/10102.png similarity index 100% rename from companion/src/images/library/10088.png rename to companion/src/images/library/10102.png diff --git a/companion/src/images/library/10090.png b/companion/src/images/library/10103.png similarity index 100% rename from companion/src/images/library/10090.png rename to companion/src/images/library/10103.png diff --git a/companion/src/images/library/10501.png b/companion/src/images/library/10501.png new file mode 100644 index 0000000000000000000000000000000000000000..51e85006a8615d554c0b7be062363b33b088ddc2 GIT binary patch literal 682 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 LNkvXXu0mjfm0HGb diff --git a/companion/src/images/library/30005.png b/companion/src/images/library/30005.png deleted file mode 100644 index 8761d4fcb984cb975b78e7d3febab2bff3719b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2395 zcmV-h38eOkP)s)Ss7SX<`bqYc@gpm#4tcmGlQ`yP&x?(gOn*PysB2m; zvY*93A0#{`Nm3bmKU+3$gD1lnTOTCP+J71YDI~M0NnQJ#PXBFV?~yr|lPR}4pdKpA z&jXNlHrIemznbayr{7mh_4@KJF2$#aW60Opex3_7T%UEjXlg>9MWPRe^=#LRjxnpu zQv5UqhQTkYFJ=zws7X6%Fkm(=+Luh5wdv(N3`~Iu=apQI%88Ql6GW6w#sC+%X%-Q;S7fWYUw8={o?RmJ}tUGN2(o1>L-_ zn(I(f$$B=6rBHI2`eZg18+1(Be6@ey?_n2smej^=991XP>ErX;McSuaC&{Ge_qHz> zwmuQQgzWgWy*~-re+nSdyJrpCS#_e1ME>-qPLkUggF4p7FwYn%j6F}uYK&^b7Ysb? zf>eGTJm$hE8?jIJIi_ATWVhkU)KiEX>h)&9<;9|B-DK9k^y#DP=%eXL2KYZHA0Kz< zNkTNmK6(nF-=2aNlfZFjC%)M3VE`+LQA!%sVSRmblIVsapbPY1XTK*}8;9_lC+8>LX&>l5i@OAb{hG-5w0WWAPl8XqO&RX5Q%q(k{=nItaHbEX@qnz5n%COJ+u`W=g zI$=J@EqPitr8>#8asSBFbDg9zdzRYxgJU3)q&g+S5*VHhi$rCX5B=1Jww*Cyp1-xX zJScTz^NYnV$qNIP|IUUTHZ5-Xcxt)#^E>IPHGg|tRp6k~oz3I5Rvun)fYkx+ZKv`q zP!oy6y}#^Zhyp}1)Lexg_ulkvO9TgO1Z;0#G~fvL8yj$Q2%;vdr*$Gx*Cyo zNlgf!n@}TI1N}auBphx*DC>#r4?!^G=A-8jiS#z(BJ}}TosLB&45gNR=vl{{7`jm> znT94XSsNvpgbC9(XLpiv8kLn&wscqhRYfF{4|4OV{g+v0uCl0>$risfR8);@#;#_` zOyj+|YnrfolPi*=LjoP2RJEF<=wHzT{=pL!f`Za*VvB!Xymof1ae!j{!#L*(?v<i_@LQL;~ zN~80~>wAA64!wO%kh~`vu)%#28sX|F;$7rec3}NgQoZM=b3lFb_vq3^oVs$k1MHt^ z!Klt3Ur|KwAs{+kx&+|0&kR9`a7TYAl8g`83BDir=asL|lHizFqepZ0Hw@pP^A!fX z1Kyin@QU`CR4E`r4822W3U~UI8{1C6?KOXE-PwD27Lxj1mX*(SeUJE>CT!G$^(mo! ztN?vSo^EtFuzTJ+PU8q5{Qs#i_h3{Fr@vx2DDhUF|49rK&>(l{OA(5(LeFjJLK-@B zaKP#QC$r86Pj{3wg8h4El1`dG*_D5=*`dMi1fvoN?W_blw7k)9v&e1{-_l7I;9HOnuxb{B0e2!rl!qGL|eI56y4~XiD5G zcjwsAm`oa!t0aUU2x#2Js$=r0X)*>*r8XP=TS#D;TrZd&pFE^@Q6GIvE4 zxj;QtA(jsUW8WVUS|5MAH5%9Hmt6?cD3lnrn$Y|--|oZQonp}>!a2ns2;Fy(TKiB- zqW4E)pu*bkUtEhOBv^!mhQ;$#wgQNPBQ&&}I-A%UB0#8R(IMFJa?kw-Ry63nQo*y( zY*I)_aZ(aEy`%0pQkcLh2oZatV^V)hdVLte$GWzQrj`>L$*9dj0`G*UEXkNsV8M7g z*s!*^Ep|YDqiovP*Y7yi^l6X(#n5n#`DpT%$A6|-Ew+?oNevfWfM4+I2?aAxF+SMmL&cK zH>zWiFlp$<&^#wk$~_X+#v|u9lbdI?a`~>CgFYX*Wz{@keYB}?+V+#$V3Dc@#8icf z5TVo@8s)=`u)iwBExwBaDfOw22(b&KKB==cSfQzA#G))X&JrB$E+J$6oc9jv@f`qi zMl{$B6td9y3LDKGUl9WChsdX$2w-K$Y3y(9H{y7x5`H9LI1C}IAx3qmlpr9eG^3vz zInL{kzOlgEk}U1BFl0z=`f^@Lbyz2J-u>_^6H`iCG);yvt}(W>p!a`rLPA-%4^}^z zftvGnHq!B2-oMDy2JBCAWV6LT3|2oDK${Mo-}z##*o$RiaNGXujHs6<{q{dU;o2(E zN9p$bbhD`(OC0C>h3e-3JZXJ;y?ObOYdfpA#Z+gGMYoIU^yQ)1{{cHtVThAOD?|VQ N002ovPDHLkV1jr;h?4*S From ca4c7b4dc13cef7d8c64e273df2cfa368ddb6e56 Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Mon, 24 Feb 2014 16:36:45 +0100 Subject: [PATCH 39/45] Corrected index error in general edit --- companion/src/generaledit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/companion/src/generaledit.cpp b/companion/src/generaledit.cpp index 6c5b6dfc9..8cccc654c 100644 --- a/companion/src/generaledit.cpp +++ b/companion/src/generaledit.cpp @@ -74,7 +74,7 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) : if (!name.isEmpty()) { ui->profile_CB->addItem(name, i); if (i==g.id()) { - ui->profile_CB->setCurrentIndex(ui->profile_CB->count()); + ui->profile_CB->setCurrentIndex(ui->profile_CB->count()-1); } } } From 0f3e6581bd86ac4e5edfa0900a14c4878b3ecc4c Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 24 Feb 2014 18:20:29 +0100 Subject: [PATCH 40/45] Update DONATIONS.txt --- DONATIONS.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DONATIONS.txt b/DONATIONS.txt index f3bf27e41..45b1c981b 100644 --- a/DONATIONS.txt +++ b/DONATIONS.txt @@ -325,3 +325,5 @@ Reginald H Millsom Emanuel Stassar Pierluigi Sommaruga Rafael Eric Suarez Nordlow +A Harris + From 9992c1f79ce63550bb1e7d8188df3d3b2d3bf4d3 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 24 Feb 2014 20:58:59 +0100 Subject: [PATCH 41/45] Update DONATIONS.txt --- DONATIONS.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DONATIONS.txt b/DONATIONS.txt index 45b1c981b..c85c6de97 100644 --- a/DONATIONS.txt +++ b/DONATIONS.txt @@ -326,4 +326,4 @@ Emanuel Stassar Pierluigi Sommaruga Rafael Eric Suarez Nordlow A Harris - +Stefan Grunenberg From 06115fdaed78193aba05f0a37f0df19c16dcf6bb Mon Sep 17 00:00:00 2001 From: Jacek Drewniak Date: Mon, 24 Feb 2014 21:44:11 +0100 Subject: [PATCH 42/45] PL translation fixes --- companion/src/translations/companion_pl.ts | 457 ++++++++++++--------- 1 file changed, 254 insertions(+), 203 deletions(-) diff --git a/companion/src/translations/companion_pl.ts b/companion/src/translations/companion_pl.ts index bd3013a8a..ab649090f 100644 --- a/companion/src/translations/companion_pl.ts +++ b/companion/src/translations/companion_pl.ts @@ -57,22 +57,22 @@ CurveGroup - + Diff Róźnicowość - + Expo Expo - + Func Funkcja - + Curve Krzywa @@ -4105,70 +4105,70 @@ p, li { white-space: pre-wrap; } QObject - + Rud SK - + Ele SW - + Thr Gaz - + Ail Lotki - - + + P1 Potencjometr 1 - - + + P2 Potencjometr 2 - - + + P3 Potencjometr 3 - + S1 Potencjometr 1 - + S2 Potencjometr 2 - + LS Lewy suwak - + RS Prawy suwak @@ -4687,26 +4687,26 @@ p, li { white-space: pre-wrap; } - + ---- - + THR THR - + ON Włącz - + OFF Wyłącz @@ -5153,7 +5153,7 @@ p, li { white-space: pre-wrap; } - + Warning Ostrzeżenie @@ -5163,94 +5163,94 @@ p, li { white-space: pre-wrap; } EEPROM zapisany z tymi ostrzeżeniami: - - + + FM%1 FP%1 FM%1 - + Input%1 Wejście %1 - + English Angielski - + French Francuski - + Italian Włoski - + German Niemiecki - + Czech Czeski - + Slovak Słowacki - + Spanish Hiszpański - + Portuguese Portugalski - + Polish Polski - + Finnish Fiński - + No Nie - + RotEnc A Pokrętło :A - + Rot Enc B Pokrętło :B - + Rot Enc C Pokrętło :C - + Rot Enc D Pokrętło :D - + Rot Enc E Pokrętło :E @@ -5572,133 +5572,133 @@ p, li { white-space: pre-wrap; } Pokrętło - + !Flight mode %1 !Faza lotu %1 - + Flight mode %1 Faza lotu %1 - + Yellow Żółty - + Orange Pomarańczowy - + Red Czerwony - + Winged Shadow How High - + Winged Shadow How High (not supported) Winged Shadow How High (nie obsługiwane) - + FrSky Sensor Hub Hub sensora FrSky - - + + None Żaden - + Imperial Imperialne - + Metric Metryczne - + Extra Fine Bardzo dokładne - + Fine Dokładne - + Medium Średni - + Coarse Gruby - + Exponential Eksponencjalny - + Count Up Licz - + Count Down Odliczaj - + %1:%2, - + : %1 Channels, %2usec Delay :Kanały %1, opóźnienie %2usX - + Flight modes(%1) Fazy lotu(%1) - + Flight mode(%1) Faza lotu (%1) - + Rudder SK - + Elevator SW - + Throttle Gaz - + Aileron Lotki @@ -5709,43 +5709,43 @@ p, li { white-space: pre-wrap; } - - + + --- - + Rud Trim Trymer SK - + Ele Trim Trymer SW - + Thr Trim Trymer gazu - + Ail Trim Trymer lotek - + Rot Enc Pokrętło - + Swedish Szwedzki - + CH%1 Kan %1 @@ -5848,46 +5848,46 @@ p, li { white-space: pre-wrap; } Zwiększanie - + Own value Własny Wartość - + Flight mode %1 value Flight phase %1 value Wartość Fazy lotu FL%1 - + Keys Przyciski - + Sticks Drążki - + Keys + Sticks Przyciski i Drążki - + -GV%1 -ZG%1 - + GV%1 ZG%1 - + Simulator for this firmware is not yet available Nie jest dostępny symulator dla tego firmware @@ -5965,17 +5965,17 @@ Zespół OpenTX/Companion. Użyj trymerów dla Fazy Lotu %1 + Własne trymery jako offset - + FW: %1 FW:%1 - + Pict: %1 Obrazek:%1 - + Profile image Obrazek Profilu @@ -7135,11 +7135,21 @@ To ustawienie jest używane przez szablony, określa jakie wyjście przypisane j SD Structure path Struktura karty SD + + + Firmware Variant + Wariant Firmware + Select Image Wybierz obrazek + + + Firmware File + Plik Firmware + Offer to write FW to Tx after download @@ -7166,9 +7176,8 @@ To ustawienie jest używane przez szablony, określa jakie wyjście przypisane j Wyczyść obrazek - Firmware - Firmware + Firmware @@ -7246,53 +7255,53 @@ To ustawienie jest używane przez szablony, określa jakie wyjście przypisane j Uaktywnij automatyczny backup przed zapisem firmware - + Select your snapshot folder Katalog zrzutów - - + + No joysticks found Brak oysticka - + Select your library folder Wybierz katalog bibliteki - + Select your Models and Settings backup folder Wybierz folder do backupowania Modeli i Ustawień - + Select Google Earth executable Wybierz wykonywalny plik Google Earth - + Select the folder replicating your SD structure Wybierz folder do zreplikowania struktury Twojej karty SD - + Not possible to remove profile Usunięcie profilu jest niemożliwe - + The default profile can not be removed. Podstawowy profil nie moze być usunięty. - + Open Image to load Otwórz obrazek do załadowania - + Images (%1) Obrazki (%1) @@ -7676,250 +7685,292 @@ m2560 dla platformy V4 Własne logo - - + Write to TX Zapisz do radia - + <html><head/><body><p>Modify calibration parameters using settings from current profile</p></body></html> <html><head/><body><p>Zmiana parametrów kalibracji przy użyciu aktualnego profilu</p></body></html> - + Patch calibration setting from profile Zamień ustawienia kalibracji wartościami z profilu - + <html><head/><body><p>Modify HW parameters using settings from current profile</p></body></html> <html><head/><body><p>Zmień ustawiania parametrów HW przy pomocy wartości z aktualnego profilu</p></body></html> - + Patch HW setting from profile Zmień ustawiania parametrów HW wartościami z profilu - + Date & Time Data i Czas - + + Use firmware start screen + Użyj ekranu startowego z firmware + + + + Use another start screen + Użyj innego ekranu startowego + + + + Use profile start screen + Użyj ekranu startowego z profilu + + + + Use library start screen + Użyj ekranu startowego z biblioteki + + + SVN - + Variant Wariant - Invert Color - Odwróć kolory + Odwróć kolory - Load Image - Otwórz logo + Otwórz logo - Open Splash Library - Otwórz bibliotekę obrazków + Otwórz bibliotekę obrazków - - ... - - - - Substitute image in firmware - Zmień logo w firmware + Zmień logo w firmware - - + + Browse for file Przeglądaj pliki - + Allows Companion to write to older version of the firmware Pozwól Companion na zapis do starszej wersji firmware - + Backup and restore Models and Settings Zbakupuj i odtwórz Modele i Ustawienia - Use image in settings - Użyj Logo w ustawieniach + Użyj Logo w ustawieniach - + Check Firmware compatibility Sprawdź kompatybilność firmware - + Current Profile Aktualny profil - + Cancel Przerwij - + Write firmware to TX Zapisz firmware do radia - + Current profile Aktualny profil - - - - - - + + + + + + Warning Ostrzeżenie - %1 is not a known firmware - %1 nie jest znanym firmware + %1 nie jest znanym firmware - Burn anyway ! - Wypiecz mimo wszystko ! + Wypiecz mimo wszystko ! - - - - - + + + + + + + - - - - + + + + + Error Błąd - + Unable to find file %1! Nie mogę odnaleźć pliku %1! - - - + + + Error opening file %1: %2. Błąd otwarcia pliku %1: %2. - + Write Models and Settings to TX Zapisz Modele i Ustawienia do radia - + Write Models and Settings in %1 to TX Zapisz Modele i Ustawienia w %1 do radia - + Open Firmware File Otwórz plik Firmware - + Choose file to load Models and Settings from Wybierz plik Modeli i Ustawien do wczytania - - - + + %1 may not be a valid firmware file + %1 moze nie być prawidłowym plikiem firmware + + + + + Invalid binary Models and Settings File %1, Proceed anyway ? Nieprawidłowy plik Modeli i Ustawień : %1. Kontynuować ? - + Error reading file %1: %2. Błąd odczytu pliku %1: %2. - - Open Image to load - Otwórz plik z logo + + The firmware file is not valid. + Plik firmware jest błedny. - + + There is no start screen image in the firmware file. + Brak obrazka ekranu startowego w firmware. + + + + The profile image %1 does not contain an image. + Obraz profilu %1 nie zawiera obrazka. + + + + Open image file to use as Tx start screen + Otwórz plik obrazka by użyć go jako ekran startowy radia + + + + Image could not be loaded from %1 + Obrazek nie moze być załadowany z %1 + + + + The library image could not be loaded + Obrazek z biblioteki nie może być załadowany + + + Open Image to load + Otwórz plik z logo + + + Images (%1) Obrazki (%1) - - Cannot load %1. - Nie mogę załadować %1. + Nie mogę załadować %1. - + Cannot save customized firmware Nie mogę zapisać przystosowanego firmware - + Custom image not found Własny obrazek nie odnaleziony - + No firmware selected Brak wyboru firmware - + Wrong radio calibration data in profile, Settings not patched Błędna kalibracja radia w profilu, Ustawienia nie spatchowane - + Wrong radio setting data in profile, Settings not patched Błędne ustawienia radia w profilu, Ustawienia nie spatchowane - - + + Cannot write file %1: %2. Nie mogę zapisać pliku %1: %2. - + Error writing file %1: %2. Błąd zapisu pliku %1: @@ -8537,75 +8588,75 @@ m2560 dla platformy V4 - - + + + - Error Błąd - + Cannot load the image file %1. Nie mogę załadować pliku obrazka %1. - + Cannot load the profile image %1. Nie mogę załadować obrazu Profilu %1. - + Cannot load the library image %1. Nie mogę załadować obrazu biblioteki %1. - + File Saved Plik Zapisany - + The image was saved to the file %1 Obraz został zapisany do pliku %1 - + Image Refresh Error Błąd odświeżenia obrazka - + Failed to refresh image from file %1 Nieudane odswieżenie obrazka z pliku %1 - + File Save Error Błąd zapisu pliku - + Failed to write image to %1 Nieudany zapis obrazka do %1 - + Open Image to load Otwórz obrazek do załadowania - + Open Firmware File Otwórz plik Firmware - + Can not load embedded image from firmware file %1. Nie mogę załądować wbudowanego obrazka z pliku Firmware %1. - + Images (%1) Obrazki (%1) @@ -10614,32 +10665,32 @@ Mode 4: splashLibrary - + ... - + Splash Library - page %1 of %2 Biblioteka obrazków - strona %1 z %2 - + Warning Ostrzeżenie - + Invalid image in library %1 Nieprawidłowy obrazek w bibliotece %1 - + Information Informacja - + No valid image found in library, check your settings Nie znaleziono prawodłowego obrazka w biblitece, sprawdź ustawienia From 2e14e5d9c84439ff84a48f6d508cfc47e44fb814 Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Mon, 24 Feb 2014 22:50:03 +0100 Subject: [PATCH 43/45] Swedish Companion translation --- companion/src/translations/companion_sv.ts | 2031 ++++++++++++-------- 1 file changed, 1176 insertions(+), 855 deletions(-) diff --git a/companion/src/translations/companion_sv.ts b/companion/src/translations/companion_sv.ts index 9b2636f07..091cd0560 100644 --- a/companion/src/translations/companion_sv.ts +++ b/companion/src/translations/companion_sv.ts @@ -57,7 +57,7 @@ CurveGroup - + Diff Diff @@ -143,7 +143,7 @@ CustomFunctionsPanel - + Switch Brytare @@ -163,17 +163,17 @@ Effekt - + CF%1 - + - + ON På - + Error Fel @@ -183,7 +183,7 @@ Kan inte hitta ljudfilen %1! - + &Delete &Ta bort @@ -601,7 +601,7 @@ Om fältet lämnas tomt så är filtret aktivt hela tiden. Allmänna inställningar - + General settings used throught the transmitter. These will be relevant for all models in the same EEPROM. Allmänna inställningar för sändaren @@ -1541,7 +1541,7 @@ Mode 4: Spänning - + Warning Varning @@ -1557,12 +1557,12 @@ Mode 4: Felaktig information i profilen, hårdvaruinställningar lästes inte in - + Do you want to store calibration in %1 profile<br>overwriting existing calibration? Vill du skriva över existerande kalibreringsdata<br>i profilen %1 med de nuvarande? - + Calibration and HW parameters saved. Kalibrering ojch hårdvaruinställningar sparades. @@ -1677,7 +1677,7 @@ Mode 4: PPMSim - + If you enable FAI, you loose the vario, the play functions, the telemetry screen. This function cannot be disabled by the radio. Are you sure ? @@ -1844,25 +1844,25 @@ FAI-funktionen kan inte slås av i sändaren. InputsPanel - + Move Up Flytta uppåt - - + + Ctrl+Up Ctrl+Up - - + + Move Down Flytta nedåt - - + + Ctrl+Down Ctrl+Down @@ -1887,12 +1887,12 @@ FAI-funktionen kan inte slås av i sändaren. Brytare(%1) - + Clear All Settings Radera alla inställningar - + Not enough available inputs! För få filter är tillgängliga! @@ -2064,39 +2064,39 @@ FAI-funktionen kan inte slås av i sändaren. MainWindow - - - - + + + + File loaded Filen har laddats - + - - + + Save As Spara Som - - + + No updates available at this time. Inga updateringar finns tillgängliga. - - - - + + + + Unable to check for updates. Det gick inte att söka efter uppdateringar. - + Executable (*.exe) Program (*.exe) @@ -2106,110 +2106,96 @@ FAI-funktionen kan inte slås av i sändaren. Vill du starta installationsprogrammet? - + Do you want to write the firmware to the transmitter now ? Vill du skriva firmware till sändaren nu? - + A new version of %1 firmware is available (current %2 - newer %3). Do you want to download it now ? En ny version finns tillgänglig av %1 fimware (Din version %2 - Ny version %3). Vill du ladda ned den nya versionen nu ? - Open - Öppna + Öppna - + File saved Filen sparades - + Copyright Copyright - New - Ny + Ny - Open... - Öppna... + Öppna... - Save... - Spara... + Spara... - Save As... - Spara Som... + Spara Som... - + Exit Avsluta - Cut - Klipp Ut + Klipp Ut - Cut current selection to the clipboard - Klipp ut markeringens innehåll till klippbordet + Klipp ut markeringens innehåll till klippbordet - Copy... - Kopiera... + Kopiera... - Copy current selection to the clipboard - Kopiera markeringens innehåll till klippbordet + Kopiera markeringens innehåll till klippbordet - Paste... - Klistra In... + Klistra In... - Paste clipboard into current selection - Klistra in klippbokens innehåll i det valda avsnittet + Klistra in klippbokens innehåll i det valda avsnittet - + Classical Klassiskt - The classical Companion icon theme - Det klassiska Companion-temat + Det klassiska Companion-temat - The new Companion 2 icon theme - Det nya Companion2-temat + Det nya Companion2-temat - Companion2 - Companion2 + Companion2 - + Monochrome Monokromt @@ -2234,137 +2220,119 @@ Vill du ladda ned den nya versionen nu ? Använd systemspråket i menyerna - About - Om + Om - Print - Skriv ut + Skriv ut - + Print current model Skriv ut modell - Simulate - Simulera + Simulera - Simulate selected model - Simulera modell + Simulera modell loadBackup... Ladda backup från fil... - Logs - Loggar + Loggar - Setting... - Inställningar... + Inställningar... - Downloads... - Nedladdningar... + Nedladdningar... - Check for updates... - Sök efter uppdateringar... + Sök efter uppdateringar... - + Edit Tx Splash Image... Startbildsredigerare... - edit the splash screen of your TX - Editera startbilder för din sändare + Editera startbilder för din sändare - List programmers - Programmerare + Programmerare - + Fuses... Säkringar... - Configure connection software... - Inställningar för kommunikation... + Inställningar för kommunikation... - + Save Tx Models and Settings to file Spara sändarens Modeller och Inställningar till fil - Contributors - Bidragande + Bidragande - + A tribute to those who have contributed to OpenTX and Companion Ett tack till alla de som bidragit till OpenTX och Companion - + Settings Inställningar - + Read/Write Läs/Skriv - - &%1 %2 - &%1 %2 + &%1 %2 &New &Ny - Create a new file - Skapa ny fil + Skapa ny fil &Open... &Öppna... - Open an existing file - Öppna en existerande fil + Öppna en existerande fil &Save &Spara - - Save the document to disk - Spara dokumentet till fil + Spara dokumentet till fil Save &As... @@ -2379,12 +2347,12 @@ Vill du ladda ned den nya versionen nu ? &Sök efter uppdateringar... - + Display previous message again at startup ? Skall föregående varning visas igen vid uppstart ? - + Firmware does not longer fit in the Tx, due to selected firmware options Firmware får inte rum i minnet på grund av att för många funktioner aktiverats @@ -2394,12 +2362,12 @@ Vill du ladda ned den nya versionen nu ? Tillfälligt fel i byggservern. Försök igen senare - + Firmware does not fit in the Tx, due to selected firmware options Firmware får inte rum i minnet på grund av att för många funktioner aktiverats - + Firmware %1 does not seem to have ever been downloaded. Version %2 is available. Do you want to download it now ? @@ -2408,12 +2376,12 @@ Version %2 finns tillgänglig. Vill du ladda ned den nu ? - + Write Models and settings from %1 to the Tx? Skriv Modeller och Inställningar från %1 till sändaren? - + Conversion failed Konverteringen misslyckades @@ -2428,7 +2396,7 @@ Vill du ladda ned den nu ? Säkerhetskopieringen misslyckades - + OpenTX Companion - FW: %1 - Profile: %2 OpenTX Companion - FW: %1 - Profil: %2 @@ -2437,7 +2405,7 @@ Vill du ladda ned den nu ? &Inställningar... - + Edit Settings Redigera Inställningar @@ -2459,7 +2427,7 @@ Vill du ladda ned den nu ? &Avsluta - + Exit the application Avsluta programmet @@ -2496,16 +2464,15 @@ Vill du ladda ned den nu ? Ctrl+Alt+R - Configure software for reading from and writing to the transmitter - Inställningar för mjukvaran som kommunicerar med sändaren + Inställningar för mjukvaran som kommunicerar med sändaren &List programmers &Programmerare - + List available programmers Lista upp tillgängliga prorammerare @@ -2552,10 +2519,8 @@ Vill du ladda ned den nu ? Visa information om programmet - - Recent Files - Senaste Filer + Senaste Filer &File @@ -2570,22 +2535,22 @@ Vill du ladda ned den nu ? Companion - Editor för Modeller och Inställningar - %1 - + Checking for updates Letar efter uppdateringar - + A new release of Companion is available please check the OpenTX website! En ny version av Companion finns tillgänglig. Var god kontrollera OpenTX webbsida! - + Ignore this version (r%1)? Ladda inte ned versionen (r%1)? - + OpenTX Home Page: <a href='%1'>%1</a> OpenTX Hemsida: <a href='%1'>%1</a> @@ -2621,16 +2586,15 @@ Vill du ladda ned den nu ? Redigera programmets inställningar - Show Companion changelog - Visa en lista med förändringar av Companion + Visa en lista med förändringar av Companion &Write Models and Settings To Tx &Skriv Modeller och Inställningar till sändaren - + Write Models and Settings to transmitter Skriv Modeller och Inställningar till sändaren @@ -2648,8 +2612,84 @@ Vill du ladda ned den nu ? Write Firmware Skriv Firmware + + + New Models+Settings + Ny Modeller+Inställningar + + Create a new Models and Settings file + Skapa en ny Modeller och Inställningar-fil + + + + Open Models+Settings... + Öppna MOdeller+Inställningar... + + + + Save Models+Settings... + Spara Modeller+Inställningar... + + + + + Save Models and Settings file + Spara Modeller och Inställningar-fil + + + + Save Models+Settings as... + Spara Modeller+Inställningar som... + + + + Cut Model + Klipp ut Modell + + + + Cut current model to the clipboard + Klipp ut vald modell till klippbordet + + + + Copy Model... + Kopera Modell... + + + + Copy current model to the clipboard + Kopiera vald modell till klippbordet + + + + Paste Model... + Klistra in Modell... + + + + Paste model from clipboard + Klistra in modell från klippbordet + + + + The classic companion9x icon theme + Det klassiska companion9x-temat + + + + Yerico + Yerico + + + + Yellow round honey sweet icon theme + Yellow round honey sweet icon theme + + + Write firmware to transmitter Skriv firmware till sändaren @@ -2697,24 +2737,40 @@ Vill du ladda ned den nu ? - + File Arkiv - + Edit Redigera - - + + Help Hjälp - + + + Radio Settings Profile + Radioprofil + + + + Show recent Models+Settings documents + Visa senaste Modeller+Inställningar-dokument + + + + Show a selection list of radio settings profiles + Visa en lista med radioprofiler + + + Ready Redo @@ -2723,17 +2779,17 @@ Vill du ladda ned den nu ? &Bidragsgivare... - + Display previous warning again at startup ? SKall föregående varning visas igen vid uppstart ? - + - + - - + + @@ -2745,21 +2801,21 @@ Vill du ladda ned den nu ? Fel - + Cannot write file %1: %2. Filen %1 kunde inte skrivas: %2. - + New release available En ny version finns tillgänglig - - - + + + Error opening file %1: @@ -2768,68 +2824,72 @@ Vill du ladda ned den nu ? %2. - + Compilation server termporary failure, try later Tillfälligt fel i byggservern. Försök igen senare - - + + Compilation server too busy, try later Byggservern är upptagen. Försök igen senare - - + + Unknown server failure, try later Okänt server-fel. Försök igen senare - Compare... - Jämför... + Jämför... - + Compare models Jämför modeller - - + + Backup is impossible Säkerhetskopiering kan inte utföras - - + + The backup dir set in preferences does not exist Foldern för säkerhetskopior existerar inte - + Warning Varning - Firmware Profiles - Profiler för Firmware + Profiler för Firmware &Read/Write &Läs/Skriv - + Write Skriv - + + %2 + %2 + + + + Unable to find file %1! Kan inte hitta filen %1 ! @@ -2845,7 +2905,7 @@ Vill du ladda ned den nu ? ladda&Backup... - + Load backup from file Ladda backup från fil @@ -2858,46 +2918,45 @@ Vill du ladda ned den nu ? Ctrl+G - Open log file - Öppna loggfil + Öppna loggfil - - + + - + Taranis radio not found Hittade inte någon Taranis-sändare - - + + Impossible to identify the radio on your system, please verify the eeprom disk is connected. Det går inte att identifiera sändaren. Verifiera att EEPOROM-skivan är ansluteten. - + Yes Ja - + A new version of Companion is available (version %1)<br>Would you like to download it? An ny version av Companion finns tillgänglig (version %1)<br>Vill du ladda ned den? - - + + Compilation server requires registration, please check OpenTX web site Byggservern kräver registrering. Var god kontrollera OpenTX webbsida - + No Nej @@ -2915,34 +2974,40 @@ Vill du ladda ned den nu ? Vill du ladda ned firmware %1 nu ? - + Release notes contain very important informations. Do you want to see them now ? Release notes innehåller väldigt viktig information. Vill du läsa dem nu? - + The selected language will be used the next time you start Companion. Språket som valts kommer att användas nästa gång Companion startas. - - + + OK OK - + The new theme will be loaded the next time you start Companion. De nya ikonerna kommer att användas nästa gång Companion startas. - + The icon size will be used the next time you start Companion. Ikonernas storlek kommer att justeras nästa gång Companion startas. - + + + Open Models and Settings file + Öppna Modeller och Inställningar-fil + + + Firmware updates Firmware-uppdatering @@ -2954,14 +3019,14 @@ Vill du ladda ned den nu ? - + Read Models and Settings From Tx Läs Modeller och Inställningar från sändaren - + The file %1 has not been recognized as a valid Models and Settings file Write anyway ? @@ -2974,13 +3039,13 @@ Starta skrivningen i alla fall ? - + Backup Models and Settings From Tx Säkerhetskopiera Modeller och Inställningar från sändaren - + Cannot check Models and Settings compatibility! Continue anyway? Det går inte att verifiera att Modeller och Inställningar är kompatibla. Fortsätt i alla fall? @@ -2996,12 +3061,12 @@ Starta skrivningen i alla fall ? - + Write Models and Settings To Tx Skriv Modeller och Inställningar till sändaren - + Write Firmware To Tx Skriv firmware till sändaren @@ -3037,7 +3102,7 @@ Starta skrivningen i alla fall ? Det gick inte att säkerhetskopiera sändarens Modeller och Inställningar. Skrikvningen av firmware avbröts - + Save transmitter Models and Settings to File Spara sändarens Modeller och Inställningar till en fil @@ -3047,12 +3112,12 @@ Starta skrivningen i alla fall ? Det går inte att identifiera sändaren. - + Read Tx Firmware to File Läs Sändarens Firmware till Fil - + About Companion Om Companion @@ -3065,28 +3130,24 @@ Starta skrivningen i alla fall ? Ladda ned firmware och röstfiler. Definera profildata. - Check for new version of Companion - Sök efter ny version av Companion + Sök efter ny version av Companion Show Companion contributors list Visa vilka som bidragit till Companion - ChangeLog... - Förändringar... + Förändringar... - Firmware ChangeLog... - Firmware-förändringar... + Firmware-förändringar... - Show firmware changelog - Visa firmware-förändringar + Visa firmware-förändringar Configure transmitter start screen... @@ -3097,12 +3158,11 @@ Starta skrivningen i alla fall ? Inställningar för &kommunikation... - New Profile - Ny Profil + Ny Profil - + Create a new Radio Setting Profile Lägg till en ny profil med radio-inställningar @@ -3115,7 +3175,7 @@ Starta skrivningen i alla fall ? Det flerfärgade klassiska Companion-temat - + A monochrome black icon theme Ett monokromt svart tema @@ -3207,6 +3267,16 @@ Starta skrivningen i alla fall ? Use English in menus Använd Engelska i menyerna + + + Finnish + Finska + + + + Use Finnish in menus + Använd Finska i menyerna + French @@ -3278,12 +3348,102 @@ Starta skrivningen i alla fall ? Använd Ryska i menyerna - + + About... + Om... + + + + Print... + Skriv Ut... + + + + Simulate... + Simulera... + + + + Simulate current model + Simulera vald modell + + + Load Backup... Ladda backup från fil... - + + View Log File... + Visa loggfil... + + + + Open and view log file + Öppna och visa loggfil + + + + Settings... + Inställningar... + + + + Download... + Nedladdning... + + + + Check for Updates... + Sök efter uppdateringar... + + + + Check OpenTX and Companion updates + Sök efter uppdateringar av Companion och OpenTX + + + + Companion Changes... + Förändringar i Companion... + + + + Show Companion change log + Visa en lista med förändringar av Companion + + + + Firmware Changes... + OpenTX-förändringar... + + + + Show firmware change log + Visa en lista med förändringar av OpenTX + + + + Compare Models... + Jämför modeller... + + + + Edit the splash image of your TX + Editera startbilden' för din sändare + + + + List programmers... + Visa programmerare... + + + + Add Radio Profile + Lägg till Radioprofil + + + Manuals and other Documents Manualer och andra Dokument @@ -3293,7 +3453,28 @@ Starta skrivningen i alla fall ? Öppna OpenTX dokumentsida i en webbläsare - + + Configure Communications... + Kommunikations-inställningar... + + + + Configure software for communicating with the transmitter + Ställ in mjukvara för kommunikation med sändaren + + + + Contributors... + Bidragande... + + + + + Recent Models+Settings + Senaste Modell+Inställnings-filer + + + Set Icon Theme Ställ in Ikontema @@ -3307,12 +3488,11 @@ Starta skrivningen i alla fall ? &Inställningar - Radio Settings Profiles - Profiler för Radioinställningar + Profiler för Radioinställningar - + Invalid Models and Settings File %1 Filen innehåller inte Modeller och Inställningar: %1 @@ -3326,7 +3506,7 @@ Starta skrivningen i alla fall ? MdiChild - + @@ -3334,14 +3514,15 @@ Starta skrivningen i alla fall ? - + - - + + + @@ -3349,36 +3530,36 @@ Starta skrivningen i alla fall ? Fel - + Editing model %1: Redigera modell %1: - + Unable to find file %1! Kan inte hitta filen %1 ! - - + + Error reading file %1: %2. Fel vid inläsning från filen %1: %2. - + - + Error opening file %1: %2. Fel vid öppning av filen %1: %2. - + @@ -3404,12 +3585,12 @@ Starta skrivningen i alla fall ? %2. - + free bytes bytes lediga - + Invalid EEPROM File %1 Ogiltig modelldatafil %1 @@ -3420,48 +3601,48 @@ Starta skrivningen i alla fall ? Ogiltig binär modelldatafil %1 - + %1 has been modified. Do you want to save your changes? %1 har förändrats. Vill du spara förändringarna? - + Cannot write temporary file! En temporär fil kunde inte skrivas! - + Backup is impossible Säkerhetskopierin kan ej utföras - + - + Companion Companion - + The backup dir set in preferences does not exist Den katalog som konfigurerats för säkerhetskopiering existerar inte - - - + + + Backup EEPROM From Tx Säkerhetskopiera modelldata från sändaren - + Cannot check eeprom compatibility! Continue anyway? Det går inte att veriifiera att modelldata är kompatibla. Fortsätt i alla fall? - + Warning Varning @@ -3477,9 +3658,13 @@ Vill du spara förändringarna? Firmware i flashminnet är föråldrat. Var god uppgradera! - + + Open backup Models and Settings file + Öppna Modeller och Inställningar-fil + + Open - Öppna + Öppna @@ -3487,16 +3672,16 @@ Vill du spara förändringarna? Den binära backupfilen är felaktig %1 - - - + + + Taranis radio not found Taranis-sändaren hittades ej - - - + + + Impossible to identify the radio on your system, please verify the eeprom disk is connected. Det går inte att identifiera sändaren. Verifiera att EEPOROM-skivan är ansluteten. @@ -3506,7 +3691,7 @@ Vill du spara förändringarna? Skriv EEPROM till sändaren - + Do you want to use model wizard? Vill du använda modell-guiden? @@ -4295,7 +4480,7 @@ p, li { white-space: pre-wrap; } ModulePanel - + Trainer Output TrainerUttag @@ -4313,7 +4498,7 @@ p, li { white-space: pre-wrap; } QObject - + P1 @@ -4359,17 +4544,15 @@ p, li { white-space: pre-wrap; } T2 - th9x - th9x + th9x - er9x - er9x + er9x - + Trainer Trainer @@ -4457,10 +4640,8 @@ p, li { white-space: pre-wrap; } Timer2 - - - - + + Warning Varning @@ -4470,19 +4651,16 @@ p, li { white-space: pre-wrap; } Modelldata sparades, men med dessa varningar: - ersky9x - ersky9x + ersky9x - - - + Simulator for this firmware is not yet available Det finns ännu ingen simulator för denna typ av firmware - + REa @@ -4738,7 +4916,7 @@ p, li { white-space: pre-wrap; } PPM%1 - + THR GAS @@ -4972,7 +5150,7 @@ p, li { white-space: pre-wrap; } Det går inte att använda Expo på en specialkurva i open9x - + Support for frsky telemetry mod Stöd för FrSky telemeri @@ -5088,12 +5266,12 @@ p, li { white-space: pre-wrap; } Stöd för FrSky PXX-protokoll - + OpenTX for FrSky Taranis Rev4a OpenTX för FrSky Taranis Rev4a - + @@ -5232,21 +5410,21 @@ p, li { white-space: pre-wrap; } X%1 - + + - GV%1 GV%1 - - + + --- ---- - + Rud Trim Rod.Trim @@ -5316,8 +5494,8 @@ p, li { white-space: pre-wrap; } Eget värde - - + + -GV%1 -GV%1 @@ -5334,18 +5512,18 @@ p, li { white-space: pre-wrap; } - + PPM values displayed in us PPM-värden visade i ms - + Bluetooth interface Blåtandsinterface - - + + S1 S1 @@ -5697,7 +5875,7 @@ p, li { white-space: pre-wrap; } Ökning - + Yellow Gul @@ -5933,7 +6111,7 @@ p, li { white-space: pre-wrap; } !Kurva(%1) - + FM%1 FM%1 @@ -5983,6 +6161,11 @@ p, li { white-space: pre-wrap; } Portuguese Portugisiska + + + Finnish + Finska + !Flight mode %1 @@ -5999,7 +6182,7 @@ p, li { white-space: pre-wrap; } Flygläge %1 värde - + openTx only accepts %1 points in all curves openTX accepterar bar %1 punkter i alla kurvor @@ -6023,14 +6206,14 @@ p, li { white-space: pre-wrap; } OpenTX accepterar inte detta antal kanaler - + Your radio probably uses a wrong firmware, eeprom size is 4096 but only the first 2048 are used Din sändare har antagligen laddats med felaktig programvara. eeprom-storleken är 4096, men enbart den första hälften används - + Support for MAVLINK devices Stöd för MAVLINK-enheter @@ -6063,12 +6246,12 @@ eeprom-storleken är 4096, men enbart den första hälften används - + Use alternative SQT5 font Använd SQT5-typsnittet - + @@ -6121,24 +6304,24 @@ eeprom-storleken är 4096, men enbart den första hälften används - + Disable HELI menu and cyclic mix support Slå av HELI-menyn och stöd för cykliska mixar - - + + Disable TEMPLATES menu Slå av menyn för Mallar - - + + Disable Global variables Slå av Globala Variabler - + Possibility to enable FAI MODE at field Möjlighet att slå på FAI-LÄGE före pflygning @@ -6181,7 +6364,7 @@ Gruppen bakom OpenTX/Companion. Använd trim från flygläge %1 + Eget trim som offset - + FW: %1 FW: %1 @@ -6342,6 +6525,296 @@ Gasen reverseras om alternativet väljs. Tomgång ligger då uppåt. Trim och ga Automatiska + + SimulatorDialog + + + + Warning + Varning + + + + Joystick enabled but not configured correctly + Joysticken påslagen, men ej rätt inställd + + + + Cannot open joystick, joystick disabled + Joysticken kan inte hittas. Joysticken stängs av + + + + Simulating Tx (%1) + Simulerar sändare (%1) + + + + Firmware %1 error: %2 + Firmware %1 fel: %2 + + + + SimulatorDialog9X + + + Companion Simulator + Companion Simulator + + + + + + + Right Double Click to Reset + Höger dubbelklick nollställer + + + + THR + GAS + + + + RUD + ROD + + + + ELE + HÖJ + + + + AIL + SKE + + + + + Hold X + Håll X + + + + + Fix X + Fixera X + + + + + Fix Y + Fixera Y + + + + + Hold Y + Håll Y + + + + + + + TextLabel + Textettikett + + + + TRN + TRN + + + + GEA + LAN + + + + ID0 + ID0 + + + + ID1 + ID1 + + + + ID2 + ID2 + + + + BEEP + Summer + + + + P1 + P1 + + + + + + 0 % + 0 % + + + + P2 + P2 + + + + P3 + P3 + + + + 9x Simulator + Simulator för 9x + + + + Outputs + Utgångar + + + + SimulatorDialogTaranis + + + Companion Simulator + Companion Simulator + + + + + Hold Y + Håll Y + + + + + Fix Y + Fixera Y + + + + + Fix X + Fixera X + + + + + Hold X + Håll X + + + + + SD + SD + + + + + SC + SC + + + + + + + Right Double Click to Reset + Höger dubbelklick nollställer + + + + + S2 + S2 + + + + + SG + SG + + + + + RS + RS + + + + + SH + SH + + + + + + + TextLabel + Textettikett + + + + + S1 + S1 + + + + + SB + SB + + + + + SA + SA + + + + + SE + SE + + + + + + SF + SF + + + + + LS + LS + + + + Taranis Simulator + Taranissimulator + + + + Outputs + Utgångar + + Telemetry @@ -6685,7 +7158,7 @@ Gasen reverseras om alternativet väljs. Tomgång ligger då uppåt. Trim och ga mAmpere (mA) - + Range Räckvidd @@ -6741,7 +7214,7 @@ Gasen reverseras om alternativet väljs. Tomgång ligger då uppåt. Trim och ga Telemetriskärm %1 - + Winged Shadow How High Winged Shadow How High @@ -6809,7 +7282,7 @@ Gasen reverseras om alternativet väljs. Tomgång ligger då uppåt. Trim och ga Programmets Inställningar - + Simulator capture folder Lagra simulatorbilder i @@ -6822,27 +7295,37 @@ Gasen reverseras om alternativet väljs. Tomgång ligger då uppåt. Trim och ga - + Open Folder Öppna katalog - + User Splash Screens Egna Startbilder - + Edit Settings Redigera Inställningar - + Application Settings Programmet - + + Only show user splash images + Enbart användarens bilder + + + + Show user and companion splash images + Både användarens bilder och Companion-bilder + + + Simulator Settings Simulatorn @@ -6872,12 +7355,11 @@ Gasen reverseras om alternativet väljs. Tomgång ligger då uppåt. Trim och ga Gul - Radio Settings - Radion + Radion - + Mode selection: Mode 1: @@ -7067,17 +7549,21 @@ Detta används av mallen för att koppla kanal till output-nummer. S G H R - + Default Stick Mode Spaktilldelning - - Settings Profile - Profil + + Firmware File + Firmware - + Settings Profile + Profil + + + Splash Screen Startbild @@ -7097,42 +7583,54 @@ Detta används av mallen för att koppla kanal till output-nummer. Sökväg till SD-struktur - + + Firmware Variant + Firmware-typ + + + Select Image Välj Bild - + Offer to write FW to Tx after download Skriv FW till Tx efter nedladdning - + + Radio Settings Profile + Radioprofile + + + + Profile Name + Profilnamn + + + Remove Profile Ta bort Profil - + Clear Image Ta bort Bild - Firmware - Firmware + Firmware - Include companion splashes - Användarens bilder och Companion-bilder + Användarens bilder och Companion-bilder - Only user defined splashes - Enbart användarens bilder + Enbart användarens bilder - + Splash Screen Library Bibliotek för startbilder @@ -7207,38 +7705,38 @@ Detta används av mallen för att koppla kanal till output-nummer. Säkerhetskopiera innan firmware-skrivning - + Select your snapshot folder Välj katalog för snapshots av Tx-simulatorn - - + + No joysticks found Ingen joystick hittades - + Select your library folder Välj bibliotekskatalog - + Select your Models and Settings backup folder Välj folder för automatisk säkerhetskopiering - + Select Google Earth executable Sökväg till Google Earth - + Select the folder replicating your SD structure Välj katalog med en kopia av din SD-struktur - + Not possible to remove profile Det går inte att ta bort profilen @@ -7256,7 +7754,7 @@ Detta används av mallen för att koppla kanal till output-nummer. Det går inte att ladda %1. - + Open Image to load Öppna bild för laddning @@ -7531,7 +8029,7 @@ OBS. Fyll enbart i detta fällt om du är säker på vad du gör. Ingen kontroll Sökväg till AVRDUDE - + Select Location @@ -7617,7 +8115,7 @@ m2560 för v4.1-kort Inställningar för Programmerare - + DFU-UTIL Configuration Inställningar för DFU-UTIL @@ -7632,7 +8130,7 @@ m2560 för v4.1-kort Inställningar för AVRDUDE - + Companion Companion @@ -7646,12 +8144,12 @@ m2560 för v4.1-kort Välj Sändarens Startbild - + Date & Time Dag & Tid - + SVN Subversion @@ -7661,102 +8159,95 @@ m2560 för v4.1-kort Tillåter Companon att skriva till äldre firmware-versioner - Load Image - Ladda Bild + Ladda Bild - Open Splash Library - Öppna bildbibliotek + Öppna bildbibliotek - ... - ... + ... - Substitute image in firmware - Byt ut bilden i firmware-filen + Byt ut bilden i firmware-filen - - + Write to TX Skriv till sändaren - Use image in settings - Använd bilden från inställningarna + Använd bilden från inställningarna - Invert Color - Invertera Bilden + Invertera Bilden - + Check Firmware compatibility Kontrollera att firmware-filen är kompatibel - + Cancel Avbryt - + Write firmware to TX Skriv firmware till sändaren - Open - Öppna + Öppna - - + + - - + + Warning Varning - Burn anyway ! - Starta bränningen! + Starta bränningen! - Open Image to load - Öppna bilden som skall laddas + Öppna bilden som skall laddas - + Images (%1) Bilder (%1) - + - - - + + + + + + Error Fel - + Write Models and Settings to TX Skriv Modeller och Inställningar till sändaren @@ -7766,25 +8257,23 @@ m2560 för v4.1-kort Skriv Modeller och Inställningar från %1 till sändaren - + Choose file to load Models and Settings from Välj fil att ladda Modeller och Inställningar från - + Invalid binary Models and Settings File %1, Proceed anyway ? Ogiltig binärfil med Modeller och Inställningar: %1. Fortsätt i alla fall ? - - Cannot load %1. - Det går inte att ladda %1. + Det går inte att ladda %1. - + Cannot save customized firmware Det gick inte att spara den modifierade firmware-filen @@ -7794,12 +8283,12 @@ m2560 för v4.1-kort Bildfilen hittades inte - + No firmware selected Ingen firmware har valts - + Wrong radio calibration data in profile, Settings not patched Felaktig information i profilen, sändarens-kalibrering kunde inte läsas in @@ -7809,12 +8298,11 @@ m2560 för v4.1-kort Felaktig information i profilen, sändarens inställningar kunde inte läsas in - %1 is not a known firmware - %1 är inte en fimware-fil + %1 är inte en fimware-fil - + <html><head/><body><p>Modify calibration parameters using settings from current profile</p></body></html> <html><head/><body><p>Uppdatera kalibrerings-parametrarna med data från nuvarande profil</p></body></html> @@ -7834,8 +8322,8 @@ m2560 för v4.1-kort Uppdatera med HW-inställningar från profilen - - + + Browse for file Välj fil @@ -7850,12 +8338,42 @@ m2560 för v4.1-kort Nuvarande Profil - + + Use firmware start screen + Använd firmware-startskärmen + + + + Use another start screen + Använd en annan startskärm + + + + Use profile start screen + Använd profilens startskärm + + + + Use library start screen + Använd biblioteks-startskärm + + + Current profile Nuvarande profil - + + Open Firmware File + Öppna firmware-fil + + + + %1 may not be a valid firmware file + %1 är kanske inte en giltig firmware-fil + + + Unable to find file %1! Kan inte hitta filen %1 ! @@ -7876,7 +8394,37 @@ m2560 för v4.1-kort %2. - + + The firmware file is not valid. + Firmware-filen är inte giltig. + + + + There is no start screen image in the firmware file. + Firmware-filen innehåller inte någon startbild. + + + + The profile image %1 does not contain an image. + Profil-bilden %1 innehåller inte någon startbild. + + + + Open image file to use as Tx start screen + Öppna bildfil för användning som radions startsskärm + + + + Image could not be loaded from %1 + Det gick inte att ladda en bild från %1 + + + + The library image could not be loaded + Bild-biblioteket kunde inte öppnas + + + Cannot write file %1: %2. @@ -7891,7 +8439,7 @@ m2560 för v4.1-kort %2. - + Variant Variant @@ -7899,12 +8447,16 @@ m2560 för v4.1-kort compareDialog - Dialog - Dialog + Dialog - + + Compare Models + Jämför Modeller + + + Drag first model here Dra hit första modellen @@ -7929,7 +8481,7 @@ m2560 för v4.1-kort Skriv till fil - + General Model Settings Generella modell-inställningar @@ -8418,7 +8970,7 @@ m2560 för v4.1-kort Dialog - + People who have contributed to this project De som har bidragit till detta projekt @@ -8428,12 +8980,12 @@ m2560 för v4.1-kort Programmerare - + Companion Release Notes Companion Release Notes - + Thank you all !!! Tack till er alla !!! @@ -8448,7 +9000,7 @@ m2560 för v4.1-kort Bidragande - + OpenTX Release Notes OpenTX Release Notes @@ -8461,58 +9013,66 @@ m2560 för v4.1-kort Startbildsredigerare - - + + Invert Invertera - - + + Load FW Ladda FW - - + + Load Pict Ladda Bild - - + + Load Profile Ladda Profil - - + + Save Spara - - + + Open Splash Library Öppna bildbibliotek - Open - Öppna + Öppna - + - + Error Fel - Cannot load embedded FW image from %1. - Det gick inte att ladda bild från FW-filen %1. + Det gick inte att ladda bild från FW-filen %1. + + + + Open Firmware File + Öppna firmware-fil + + + + Can not load embedded image from firmware file %1. + Det gick inte att ladda bild från firmware-filen %1. @@ -8525,7 +9085,7 @@ m2560 för v4.1-kort Det gick inte att ladda profilbilden %1. - + Cannot load the library image %1. Det gick inte att ladda biblioteks-bilden %1. @@ -8564,7 +9124,7 @@ m2560 för v4.1-kort Det finns ingen bild att byta i firmware-filen - + Open Image to load Öppna bild för laddning @@ -8586,9 +9146,10 @@ m2560 för v4.1-kort Det gick inte att spara bilden i filen %1 - - - + + + + ... ... @@ -8601,7 +9162,7 @@ m2560 för v4.1-kort Nedladdning: - + Unable to save the file %1: %2. Kan ej spara filen %1: %2. @@ -8624,7 +9185,7 @@ m2560 för v4.1-kort Säkringar - + Read Fuses Läs in säkringarna @@ -8760,7 +9321,12 @@ p, li { white-space: pre-wrap; } fwPreferencesDialog - + + Downloads + Nedladdningar + + + @@ -8907,16 +9473,15 @@ Används av mallarna för att koppla ihop kanaler med numrerade utgångar.Skriv FW till Tx efter nedladdning - Downloads and Profiles - Nedladdning och Profiler + Nedladdning och Profiler Save Profile Spara Profil - + Menu Language Menyspråk @@ -8967,7 +9532,7 @@ Används av mallarna för att koppla ihop kanaler med numrerade utgångar.Sök efter uppdateringar - + Last downloaded release: %1 Senast nedladdade release: %1 @@ -9009,7 +9574,7 @@ Används av mallarna för att koppla ihop kanaler med numrerade utgångar. joystickDialog - + Configure Joystick Ställ in Joystick @@ -9158,7 +9723,7 @@ Används av mallarna för att koppla ihop kanaler med numrerade utgångar.OK - + Move sticks and pots in every direction making full movement Press next when finished Rör spakar och pottentiometrar. Ge fulla utslag. @@ -9209,7 +9774,7 @@ Tryck på Avbryt för att avburyta kalibreringen Dubblerad koppling av spak - + @@ -9241,7 +9806,7 @@ Tryck på Avbryt för att avburyta kalibreringen Companion Logg-läsare - + Filename Filnamn @@ -9251,7 +9816,7 @@ Tryck på Avbryt för att avburyta kalibreringen Öppna Loggfil - + Zoom Zoom @@ -9266,7 +9831,7 @@ Tryck på Avbryt för att avburyta kalibreringen Y - + Telemetry logs Telemetriloggar @@ -9276,7 +9841,7 @@ Tryck på Avbryt för att avburyta kalibreringen Tid - + Error Fel @@ -9288,7 +9853,7 @@ Tryck på Avbryt för att avburyta kalibreringen %2. - + Select your log file Välj loggfil @@ -9311,7 +9876,7 @@ Tryck på Avbryt för att avburyta kalibreringen mdiChild - + Simulate Tx Simulera sändare @@ -9324,7 +9889,7 @@ Tryck på Avbryt för att avburyta kalibreringen Guide för modellkonfiguaration - + Engine Motor @@ -9738,7 +10303,7 @@ Tryck på Avbryt för att avburyta kalibreringen Dubbla Sidoroder (med 2 servon) - + Apply configuration ? Tillämpa inställningarna? @@ -10155,62 +10720,48 @@ Mode 4: Firmware-info - Last downloaded release: %1 - Senast nedladdade release: %1 + Senast nedladdade release: %1 - - No joysticks found - Ingen joystick hittades + Ingen joystick hittades - Select your Models and Settings backup folder - Välj folder för automatisk säkerhetskopiering + Välj folder för automatisk säkerhetskopiering - Select Google Earth executable - Sökväg till Google Earth + Sökväg till Google Earth - Open Image to load - Öppna bild för laddning + Öppna bild för laddning - Images (%1) - Bilder (%1) + Bilder (%1) - - Error - Fel + Fel - The selected firmware has never been downloaded by Companion. - Firmware-filen har aldrig laddats ned av Companion. + Firmware-filen har aldrig laddats ned av Companion. - The selected firmware cannot be downloaded by Companion. - Firmware-filen kan inte laddas ned av Companion. + Firmware-filen kan inte laddas ned av Companion. - - Cannot load %1. - %1 kunde inte laddas. + %1 kunde inte laddas. - Image stored in settings - Bilden lagras i inställningar + Bilden lagras i inställningar @@ -10261,12 +10812,11 @@ Mode 4: säkerhetskopiera innan skrivning - Select your library folder - Välj bibliotekskatalog + Välj bibliotekskatalog - + Export Profile Exportera Profil @@ -10293,19 +10843,16 @@ May be different from firmware language Får skilja från språket för mjukvaran - Export profile As - Exportera profil som + Exportera profil som - Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? - Det finns redan en profil i position %1,. Den kommer att skrivas över.<br> Är du säker ? + Det finns redan en profil i position %1,. Den kommer att skrivas över.<br> Är du säker ? - Open Profile to import - Öppna profil för import + Öppna profil för import @@ -10331,14 +10878,12 @@ Får skilja från språket för mjukvaran Använd bara clipboard - Select your snapshot folder - Välj katalog för snapshots + Välj katalog för snapshots - Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? - Profilnamn saknas, profilplats %1 kommer att raderas.<br> Är du säker? + Profilnamn saknas, profilplats %1 kommer att raderas.<br> Är du säker? @@ -10361,9 +10906,8 @@ Får skilja från språket för mjukvaran Sökväg till SD-struktur - Select the folder replicating your SD structure - Välj katalog som härmar din SD-struktur + Välj katalog som härmar din SD-struktur @@ -10374,7 +10918,7 @@ Får skilja från språket för mjukvaran Dialog - + Close Stäng @@ -10389,7 +10933,7 @@ Får skilja från språket för mjukvaran Skriv till fil - + Setup for: Inställningar för: @@ -10816,434 +11360,327 @@ Får skilja från språket för mjukvaran simulatorDialog - P1 - P1 + P1 - P2 - P2 + P2 - P3 - P3 + P3 - THR - GAS + GAS - RUD - ROD + ROD - ELE - HÖJ + HÖJ - AIL - SKE + SKE - - Hold X - Håll X + Håll X - - Fix X - Fixera X + Fixera X - - Fix Y - Fixera Y + Fixera Y - - Hold Y - Håll Y + Håll Y - - - - TextLabel - Textettikett + Textettikett - TRN - TRN + TRN - GEA - LAN + LAN - ID0 - ID0 + ID0 - ID1 - ID1 + ID1 - ID2 - ID2 + ID2 - BEEP - Summer + Summer - - - - Right Double Click to Reset - Höger dubbelklick nollställer + Höger dubbelklick nollställer - Companion Simulator - Companion Simulator + Companion Simulator - 9x Simulator - Simulator för 9x + Simulator för 9x - Outputs - Utgångar + Utgångar - LS1 - LB1 + LB1 - LS2 - LB2 + LB2 - LS3 - LB3 + LB3 - LS4 - LB4 + LB4 - LS5 - LB5 + LB5 - LS6 - LB6 + LB6 - LS7 - LB7 + LB7 - LS8 - LB8 + LB8 - LS9 - LB9 + LB9 - LSA - LBA + LBA - LSB - LBB + LBB - LSC - LBC + LBC - LSD - LBD + LBD - LSE - LBE + LBE - LSF - LBF + LBF - LSG - LBG + LBG - LSH - LBH + LBH - LSI - LBI + LBI - LSJ - LBJ + LBJ - LSK - LBK + LBK - LSL - LBL + LBL - LSM - LBM + LBM - LSN - LBN + LBN - LSO - LBO + LBO - LSP - LBP + LBP - LSQ - LBQ + LBQ - LSR - LBR + LBR - LSS - LBS + LBS - LST - LBT + LBT - LSU - LBU + LBU - LSV - LBV + LBV - LSW - LBW + LBW - CH1 - KN1 + KN1 - CH9 - KN9 + KN9 - CH2 - KN2 + KN2 - CH10 - KN10 + KN10 - CH3 - KN3 + KN3 - CH11 - KN11 + KN11 - CH4 - KN4 + KN4 - CH12 - KN12 + KN12 - CH5 - KN5 + KN5 - CH13 - KN13 + KN13 - CH6 - KN6 + KN6 - CH14 - KN14 + KN14 - CH7 - KN7 + KN7 - CH15 - KN15 + KN15 - CH8 - KN8 + KN8 - CH16 - KN16 + KN16 - - - - - - - - - - - - - - - - -100.1 - -100.1 + -100.1 - - Warning - Varning + Varning - Joystick enabled but not configured correctly - Joysticken påslagen, men ej rätt inställd + Joysticken påslagen, men ej rätt inställd - Cannot open joystick, joystick disabled - Joysticken kan inte hittas. Joysticken stängs av + Joysticken kan inte hittas. Joysticken stängs av - Firmware %1 error: %2 - Firmware %1 fel: %2 + Firmware %1 fel: %2 - Simulating Tx (%1) - Simulerar sändare (%1) + Simulerar sändare (%1) - Simulating - Simulerar + Simulerar - - - 0 % - 0 % + 0 % - - Flight mode: %1(%2) - - Fligmod: %1(%2) + - Fligmod: %1(%2) splashLibrary - - + + ... ... @@ -11253,7 +11690,7 @@ Får skilja från språket för mjukvaran Bildbibliotek - Sida %1 av %2 - + Warning Varning @@ -11276,428 +11713,312 @@ Får skilja från språket för mjukvaran xsimulatorDialog - - SE - SE + SE - - SA - SA + SA - - SB - SB + SB - - - - Right Double Click to Reset - Höger dubbelklick nollställer + Höger dubbelklick nollställer - - - - TextLabel - Textettikett + Textettikett - - Hold X - Håll X + Håll X - - Fix X - Fixera X + Fixera X - - Fix Y - Fixera Y + Fixera Y - - Hold Y - Håll Y + Håll Y - - SH - SH + SH - - SG - SG + SG - Companion Simulator - Companion Simulator + Companion Simulator - - SD - SD + SD - - SC - SC + SC - Outputs - Utgångar + Utgångar - CH1 - KN1 + KN1 - - - - - - - - - - - - - - - - -100.1 - -100.1 + -100.1 - CH9 - KN9 + KN9 - CH2 - KN2 + KN2 - CH10 - KN10 + KN10 - CH3 - KN3 + KN3 - CH11 - KN11 + KN11 - CH4 - KN4 + KN4 - CH12 - KN12 + KN12 - CH5 - KN5 + KN5 - CH13 - KN13 + KN13 - CH6 - KN6 + KN6 - CH14 - KN14 + KN14 - CH7 - KN7 + KN7 - CH15 - KN15 + KN15 - CH8 - KN8 + KN8 - CH16 - KN16 + KN16 - LSK - LBK + LBK - LSC - LBC + LBC - LSD - LBD + LBD - LS7 - LB7 + LB7 - LSL - LBL + LBL - LSB - LBB + LBB - LS1 - LB1 + LB1 - LSH - LBH + LBH - LSG - LBG + LBG - LSE - LBE + LBE - LSF - LBF + LBF - LS8 - LB8 + LB8 - LS9 - LB9 + LB9 - LSA - LBA + LBA - LSM - LBM + LBM - LSJ - LBJ + LBJ - LSI - LBI + LBI - LS4 - LB4 + LB4 - LS5 - LB5 + LB5 - LS2 - LB2 + LB2 - LS3 - LB3 + LB3 - LS6 - LB6 + LB6 - LSN - LBN + LBN - LSO - LBO + LBO - LSP - LBP + LBP - LSQ - LBQ + LBQ - LSR - LBR + LBR - LSS - LBS + LBS - LST - LBT + LBT - LSU - LBU + LBU - LSV - LBV + LBV - LSW - LBW + LBW - - Warning - Varning + Varning - Joystick enabled but not configured correctly - Joysticken påslagen, men ej rätt inställd + Joysticken påslagen, men ej rätt inställd - Cannot open joystick, joystick disabled - Joysticken kan inte hittas. Joysticken stängs av + Joysticken kan inte hittas. Joysticken stängs av - Firmware %1 error: %2 - Firmware %1 fel: %2 + Firmware %1 fel: %2 - Simulating Tx (%1) - Simulerar sändare (%1) + Simulerar sändare (%1) - Simulating - Simulerar + Simulerar - - - SF - SF + SF - - S2 - S2 + S2 - - RS - RS + RS - - S1 - S1 + S1 - - LS - LS + LS - Taranis Simulator - Taranissimulator + Taranissimulator - - Flight mode: %1(%2) - - Fligmod: %1(%2) + - Fligmod: %1(%2) From bfb5f5b993812708f943c0773b7fd2d49ed8ef14 Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Tue, 25 Feb 2014 19:09:21 +0100 Subject: [PATCH 44/45] Martin Hotar splash screen in 212x64 format added --- companion/src/images/library/00005.png | Bin 209 -> 5422 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/companion/src/images/library/00005.png b/companion/src/images/library/00005.png index 802e9885a8d41bc2573134d0c875e5e07a120834..34e83f86014b84c8cd9c26ebfa5bd22486d852b6 100644 GIT binary patch delta 5418 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 U?vg>B0000907*qoM6N<$f?VRZtpET3 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^SAf`o14uBqJF!g!Qk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T`D94;$Owbqp3jA<+`oh!W@g+}zZ>5{8h(qQtz+Vg=9K#Pn2YAJaCV0)I~z z$B>MBZ_hLGGB9v3FUbCXZhLz(o6qO-ZeFAVE%r(G8SAxEHyZ+tX7F_Nb6Mw<&;$V7 C>o;ov From b5c46626f91448d9601e500d4addd8382628bb6f Mon Sep 17 00:00:00 2001 From: Kjell Kernen Date: Tue, 25 Feb 2014 20:19:51 +0100 Subject: [PATCH 45/45] Another Taranis splash screen. Idea stolen from Martin. --- companion/src/images/library/00006.png | Bin 209 -> 3102 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/companion/src/images/library/00006.png b/companion/src/images/library/00006.png index 802e9885a8d41bc2573134d0c875e5e07a120834..7a9064c937edd1f2c6b0d6180bea69ba3a3d58d5 100644 GIT binary patch delta 3079 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 V6$#2s3eNxl002ovPDHLkV1mZX1?&I- literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^SAf`o14uBqJF!g!Qk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T`D94;$Owbqp3jA<+`oh!W@g+}zZ>5{8h(qQtz+Vg=9K#Pn2YAJaCV0)I~z z$B>MBZ_hLGGB9v3FUbCXZhLz(o6qO-ZeFAVE%r(G8SAxEHyZ+tX7F_Nb6Mw<&;$V7 C>o;ov