From e1030e7999e014dcf19b5c4c5c3d4a5f3286b3d5 Mon Sep 17 00:00:00 2001 From: hedger Date: Mon, 25 Sep 2023 08:04:34 +0300 Subject: [PATCH 1/3] fbt: reworked tool path handling (#3105) * fbt: removed absolute paths from env setup; moved abs paths to cdb tool * fbt: moved tool lookup to cdb emitter * fbt: cdb: quote only tools with spaces in path * typo fix * fbt: pvs: suppress license expiration warning --- scripts/fbt_tools/compilation_db.py | 34 +++++++++++++++++++---------- scripts/fbt_tools/crosscc.py | 13 ++++++----- scripts/fbt_tools/pvsstudio.py | 1 + 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/scripts/fbt_tools/compilation_db.py b/scripts/fbt_tools/compilation_db.py index 1f829ddb4..3d5e469f4 100644 --- a/scripts/fbt_tools/compilation_db.py +++ b/scripts/fbt_tools/compilation_db.py @@ -29,22 +29,26 @@ which is the name that most clang tools search for by default. # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # -import json -import itertools import fnmatch +import itertools +import json +from shlex import quote + import SCons - -from SCons.Tool.cxx import CXXSuffixes +from SCons.Tool.asm import ASPPSuffixes, ASSuffixes from SCons.Tool.cc import CSuffixes -from SCons.Tool.asm import ASSuffixes, ASPPSuffixes +from SCons.Tool.cxx import CXXSuffixes -# TODO FL-3542: Is there a better way to do this than this global? Right now this exists so that the +# TODO: (-nofl) Is there a better way to do this than this global? Right now this exists so that the # emitter we add can record all of the things it emits, so that the scanner for the top level # compilation database can access the complete list, and also so that the writer has easy # access to write all of the files. But it seems clunky. How can the emitter and the scanner # communicate more gracefully? __COMPILATION_DB_ENTRIES = [] +# We cache the tool path lookups to avoid doing them over and over again. +_TOOL_PATH_CACHE = {} + # We make no effort to avoid rebuilding the entries. Someday, perhaps we could and even # integrate with the cache, but there doesn't seem to be much call for it. @@ -91,7 +95,7 @@ def make_emit_compilation_DB_entry(comstr): __COMPILATIONDB_ENV=env, ) - # TODO FL-3541: Technically, these next two lines should not be required: it should be fine to + # TODO: (-nofl) Technically, these next two lines should not be required: it should be fine to # cache the entries. However, they don't seem to update properly. Since they are quick # to re-generate disable caching and sidestep this problem. env.AlwaysBuild(entry) @@ -122,6 +126,17 @@ def compilation_db_entry_action(target, source, env, **kw): env=env["__COMPILATIONDB_ENV"], ) + # We assume first non-space character is the executable + executable = command.split(" ", 1)[0] + if not (tool_path := _TOOL_PATH_CACHE.get(executable, None)): + tool_path = env.WhereIs(executable) or executable + _TOOL_PATH_CACHE[executable] = tool_path + # If there are spaces in the executable path, we need to quote it + if " " in tool_path: + tool_path = quote(tool_path) + # Replacing the executable with the full path + command = tool_path + command[len(executable) :] + entry = { "directory": env.Dir("#").abspath, "command": command, @@ -242,10 +257,7 @@ def generate(env, **kwargs): for entry in components_by_suffix: suffix = entry[0] builder, base_emitter, command = entry[1] - - # Assumes a dictionary emitter - emitter = builder.emitter.get(suffix, False) - if emitter: + if emitter := builder.emitter.get(suffix, False): # We may not have tools installed which initialize all or any of # cxx, cc, or assembly. If not skip resetting the respective emitter. builder.emitter[suffix] = SCons.Builder.ListEmitter( diff --git a/scripts/fbt_tools/crosscc.py b/scripts/fbt_tools/crosscc.py index 42fb4ce4b..4890424e6 100644 --- a/scripts/fbt_tools/crosscc.py +++ b/scripts/fbt_tools/crosscc.py @@ -2,8 +2,6 @@ import subprocess import gdb import objdump -import shutil - import strip from SCons.Action import _subproc from SCons.Errors import StopError @@ -13,20 +11,25 @@ from SCons.Tool import ar, asm, gcc, gnulink, gxx def prefix_commands(env, command_prefix, cmd_list): for command in cmd_list: if command in env: - env[command] = shutil.which(command_prefix + env[command]) + prefixed_binary = command_prefix + env[command] + if not env.WhereIs(prefixed_binary): + raise StopError( + f"Toolchain binary {prefixed_binary} not found in PATH." + ) + env.Replace(**{command: prefixed_binary}) def _get_tool_version(env, tool): verstr = "version unknown" proc = _subproc( env, - env.subst("${%s} --version" % tool), + [env.subst("${%s}" % tool), "--version"], stdout=subprocess.PIPE, stderr="devnull", stdin="devnull", universal_newlines=True, error="raise", - shell=True, + shell=False, ) if proc: verstr = proc.stdout.readline() diff --git a/scripts/fbt_tools/pvsstudio.py b/scripts/fbt_tools/pvsstudio.py index 211f46aee..b2592eca6 100644 --- a/scripts/fbt_tools/pvsstudio.py +++ b/scripts/fbt_tools/pvsstudio.py @@ -48,6 +48,7 @@ def generate(env): "@.pvsoptions", "-j${PVSNCORES}", # "--incremental", # kinda broken on PVS side + "--disableLicenseExpirationCheck", ], PVSCONVOPTIONS=[ "-a", From 63d7d46bd3af7adfbcf7d95e8a1a7f4ebd6753bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=82=E3=81=8F?= Date: Mon, 25 Sep 2023 14:12:12 +0900 Subject: [PATCH 2/3] FuriHal,BleGlue: prevent sleep while HCI command executed, proper bt api rpc locking. Fixes random system lockups. (#3107) --- applications/services/bt/bt_service/bt.c | 8 ++++---- applications/services/bt/bt_service/bt_api.c | 11 +++++++---- applications/services/bt/bt_service/bt_i.h | 4 ++-- applications/system/hid_app/hid.c | 8 ++------ firmware/targets/f7/ble_glue/ble_app.c | 2 ++ firmware/targets/f7/furi_hal/furi_hal_bt.c | 3 +++ 6 files changed, 20 insertions(+), 16 deletions(-) diff --git a/applications/services/bt/bt_service/bt.c b/applications/services/bt/bt_service/bt.c index 1b12ee303..95a9bd304 100644 --- a/applications/services/bt/bt_service/bt.c +++ b/applications/services/bt/bt_service/bt.c @@ -359,13 +359,13 @@ static void bt_change_profile(Bt* bt, BtMessage* message) { *message->result = false; } } - furi_event_flag_set(bt->api_event, BT_API_UNLOCK_EVENT); + api_lock_unlock(message->lock); } -static void bt_close_connection(Bt* bt) { +static void bt_close_connection(Bt* bt, BtMessage* message) { bt_close_rpc_connection(bt); furi_hal_bt_stop_advertising(); - furi_event_flag_set(bt->api_event, BT_API_UNLOCK_EVENT); + api_lock_unlock(message->lock); } int32_t bt_srv(void* p) { @@ -432,7 +432,7 @@ int32_t bt_srv(void* p) { } else if(message.type == BtMessageTypeSetProfile) { bt_change_profile(bt, &message); } else if(message.type == BtMessageTypeDisconnect) { - bt_close_connection(bt); + bt_close_connection(bt, &message); } else if(message.type == BtMessageTypeForgetBondedDevices) { bt_keys_storage_delete(bt->keys_storage); } diff --git a/applications/services/bt/bt_service/bt_api.c b/applications/services/bt/bt_service/bt_api.c index 2f56b50a3..e31031783 100644 --- a/applications/services/bt/bt_service/bt_api.c +++ b/applications/services/bt/bt_service/bt_api.c @@ -6,11 +6,14 @@ bool bt_set_profile(Bt* bt, BtProfile profile) { // Send message bool result = false; BtMessage message = { - .type = BtMessageTypeSetProfile, .data.profile = profile, .result = &result}; + .lock = api_lock_alloc_locked(), + .type = BtMessageTypeSetProfile, + .data.profile = profile, + .result = &result}; furi_check( furi_message_queue_put(bt->message_queue, &message, FuriWaitForever) == FuriStatusOk); // Wait for unlock - furi_event_flag_wait(bt->api_event, BT_API_UNLOCK_EVENT, FuriFlagWaitAny, FuriWaitForever); + api_lock_wait_unlock_and_free(message.lock); return result; } @@ -19,11 +22,11 @@ void bt_disconnect(Bt* bt) { furi_assert(bt); // Send message - BtMessage message = {.type = BtMessageTypeDisconnect}; + BtMessage message = {.lock = api_lock_alloc_locked(), .type = BtMessageTypeDisconnect}; furi_check( furi_message_queue_put(bt->message_queue, &message, FuriWaitForever) == FuriStatusOk); // Wait for unlock - furi_event_flag_wait(bt->api_event, BT_API_UNLOCK_EVENT, FuriFlagWaitAny, FuriWaitForever); + api_lock_wait_unlock_and_free(message.lock); } void bt_set_status_changed_callback(Bt* bt, BtStatusChangedCallback callback, void* context) { diff --git a/applications/services/bt/bt_service/bt_i.h b/applications/services/bt/bt_service/bt_i.h index c8a0e9965..55bae76f3 100644 --- a/applications/services/bt/bt_service/bt_i.h +++ b/applications/services/bt/bt_service/bt_i.h @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -22,8 +23,6 @@ #define BT_KEYS_STORAGE_PATH INT_PATH(BT_KEYS_STORAGE_FILE_NAME) -#define BT_API_UNLOCK_EVENT (1UL << 0) - typedef enum { BtMessageTypeUpdateStatus, BtMessageTypeUpdateBatteryLevel, @@ -48,6 +47,7 @@ typedef union { } BtMessageData; typedef struct { + FuriApiLock lock; BtMessageType type; BtMessageData data; bool* result; diff --git a/applications/system/hid_app/hid.c b/applications/system/hid_app/hid.c index a969a933a..6c4b928de 100644 --- a/applications/system/hid_app/hid.c +++ b/applications/system/hid_app/hid.c @@ -422,9 +422,7 @@ int32_t hid_ble_app(void* p) { furi_record_close(RECORD_STORAGE); - if(!bt_set_profile(app->bt, BtProfileHidKeyboard)) { - FURI_LOG_E(TAG, "Failed to switch to HID profile"); - } + furi_check(bt_set_profile(app->bt, BtProfileHidKeyboard)); furi_hal_bt_start_advertising(); bt_set_status_changed_callback(app->bt, bt_hid_connection_status_changed_callback, app); @@ -442,9 +440,7 @@ int32_t hid_ble_app(void* p) { bt_keys_storage_set_default_path(app->bt); - if(!bt_set_profile(app->bt, BtProfileSerial)) { - FURI_LOG_E(TAG, "Failed to switch to Serial profile"); - } + furi_check(bt_set_profile(app->bt, BtProfileSerial)); hid_free(app); diff --git a/firmware/targets/f7/ble_glue/ble_app.c b/firmware/targets/f7/ble_glue/ble_app.c index 548a86e19..37ec3d0b9 100644 --- a/firmware/targets/f7/ble_glue/ble_app.c +++ b/firmware/targets/f7/ble_glue/ble_app.c @@ -181,9 +181,11 @@ static void ble_app_hci_event_handler(void* pPayload) { static void ble_app_hci_status_not_handler(HCI_TL_CmdStatus_t status) { if(status == HCI_TL_CmdBusy) { + furi_hal_power_insomnia_enter(); furi_mutex_acquire(ble_app->hci_mtx, FuriWaitForever); } else if(status == HCI_TL_CmdAvailable) { furi_mutex_release(ble_app->hci_mtx); + furi_hal_power_insomnia_exit(); } } diff --git a/firmware/targets/f7/furi_hal/furi_hal_bt.c b/firmware/targets/f7/furi_hal/furi_hal_bt.c index 34818e569..48bce998e 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_bt.c +++ b/firmware/targets/f7/furi_hal/furi_hal_bt.c @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -269,6 +270,7 @@ bool furi_hal_bt_start_app(FuriHalBtProfile profile, GapEventCallback event_cb, } void furi_hal_bt_reinit() { + furi_hal_power_insomnia_enter(); FURI_LOG_I(TAG, "Disconnect and stop advertising"); furi_hal_bt_stop_advertising(); @@ -298,6 +300,7 @@ void furi_hal_bt_reinit() { furi_hal_bt_init(); furi_hal_bt_start_radio_stack(); + furi_hal_power_insomnia_exit(); } bool furi_hal_bt_change_app(FuriHalBtProfile profile, GapEventCallback event_cb, void* context) { From a6bb9698ef67ab8680be46c2e465715a5c4d8de0 Mon Sep 17 00:00:00 2001 From: Astra <93453568+Astrrra@users.noreply.github.com> Date: Mon, 25 Sep 2023 17:03:51 +0900 Subject: [PATCH 3/3] [FL-3609] Add the coding in the shell animation (#3106) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: あく --- .../L2_Coding_in_the_shell_128x64/frame_0.png | Bin 0 -> 1074 bytes .../L2_Coding_in_the_shell_128x64/frame_1.png | Bin 0 -> 1076 bytes .../frame_10.png | Bin 0 -> 1209 bytes .../frame_11.png | Bin 0 -> 1231 bytes .../frame_12.png | Bin 0 -> 1229 bytes .../frame_13.png | Bin 0 -> 1182 bytes .../frame_14.png | Bin 0 -> 968 bytes .../frame_15.png | Bin 0 -> 971 bytes .../frame_16.png | Bin 0 -> 1160 bytes .../frame_17.png | Bin 0 -> 1082 bytes .../frame_18.png | Bin 0 -> 1068 bytes .../frame_19.png | Bin 0 -> 1123 bytes .../L2_Coding_in_the_shell_128x64/frame_2.png | Bin 0 -> 1122 bytes .../frame_20.png | Bin 0 -> 1153 bytes .../frame_21.png | Bin 0 -> 1134 bytes .../frame_22.png | Bin 0 -> 1021 bytes .../frame_23.png | Bin 0 -> 929 bytes .../frame_24.png | Bin 0 -> 856 bytes .../frame_25.png | Bin 0 -> 1499 bytes .../frame_26.png | Bin 0 -> 1408 bytes .../frame_27.png | Bin 0 -> 1367 bytes .../frame_28.png | Bin 0 -> 1882 bytes .../frame_29.png | Bin 0 -> 1757 bytes .../L2_Coding_in_the_shell_128x64/frame_3.png | Bin 0 -> 1115 bytes .../frame_30.png | Bin 0 -> 1426 bytes .../frame_31.png | Bin 0 -> 1423 bytes .../frame_32.png | Bin 0 -> 1482 bytes .../frame_33.png | Bin 0 -> 1518 bytes .../frame_34.png | Bin 0 -> 1539 bytes .../frame_35.png | Bin 0 -> 1536 bytes .../frame_36.png | Bin 0 -> 1539 bytes .../frame_37.png | Bin 0 -> 1528 bytes .../frame_38.png | Bin 0 -> 1837 bytes .../frame_39.png | Bin 0 -> 1780 bytes .../L2_Coding_in_the_shell_128x64/frame_4.png | Bin 0 -> 1144 bytes .../frame_40.png | Bin 0 -> 1778 bytes .../frame_41.png | Bin 0 -> 1770 bytes .../frame_42.png | Bin 0 -> 1741 bytes .../frame_43.png | Bin 0 -> 1004 bytes .../frame_44.png | Bin 0 -> 1025 bytes .../frame_45.png | Bin 0 -> 645 bytes .../frame_46.png | Bin 0 -> 837 bytes .../frame_47.png | Bin 0 -> 820 bytes .../frame_48.png | Bin 0 -> 925 bytes .../frame_49.png | Bin 0 -> 911 bytes .../L2_Coding_in_the_shell_128x64/frame_5.png | Bin 0 -> 1126 bytes .../frame_50.png | Bin 0 -> 880 bytes .../frame_51.png | Bin 0 -> 837 bytes .../frame_52.png | Bin 0 -> 876 bytes .../frame_53.png | Bin 0 -> 820 bytes .../frame_54.png | Bin 0 -> 913 bytes .../frame_55.png | Bin 0 -> 1080 bytes .../frame_56.png | Bin 0 -> 1026 bytes .../frame_57.png | Bin 0 -> 1132 bytes .../frame_58.png | Bin 0 -> 974 bytes .../frame_59.png | Bin 0 -> 1309 bytes .../L2_Coding_in_the_shell_128x64/frame_6.png | Bin 0 -> 1077 bytes .../frame_60.png | Bin 0 -> 1269 bytes .../frame_61.png | Bin 0 -> 1011 bytes .../L2_Coding_in_the_shell_128x64/frame_7.png | Bin 0 -> 988 bytes .../L2_Coding_in_the_shell_128x64/frame_8.png | Bin 0 -> 1201 bytes .../L2_Coding_in_the_shell_128x64/frame_9.png | Bin 0 -> 1214 bytes .../L2_Coding_in_the_shell_128x64/meta.txt | 23 ++++++++++++++++++ assets/dolphin/external/manifest.txt | 7 ++++++ 64 files changed, 30 insertions(+) create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_0.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_1.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_10.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_11.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_12.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_13.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_14.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_15.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_16.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_17.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_18.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_19.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_2.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_20.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_21.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_22.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_23.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_24.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_25.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_26.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_27.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_28.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_29.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_3.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_30.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_31.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_32.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_33.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_34.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_35.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_36.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_37.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_38.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_39.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_4.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_40.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_41.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_42.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_43.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_44.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_45.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_46.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_47.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_48.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_49.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_5.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_50.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_51.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_52.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_53.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_54.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_55.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_56.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_57.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_58.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_59.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_6.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_60.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_61.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_7.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_8.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_9.png create mode 100644 assets/dolphin/external/L2_Coding_in_the_shell_128x64/meta.txt diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_0.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e34e7969077ef4ecc5a858c3924eb7b46b37b264 GIT binary patch literal 1074 zcmV-21kL-2P)dZg!=nB_N{B zd`c-=QFb%p`k{0wfB4;$G=A9NN^wZ{jT_)PkOSNbSC$6@(Zg; zXataAt)gt{1iqYK7ND|B2+)q{ zc`JWwScrl}<24I_hD&Qb^}0pSngXDWwI2WAO-LHwbB~JUUXsvh{nMNVTBH_v_Ph+z z{)q5#f7El*j!f$a{BJTQ-{{C83`Q3lbv7dvnr`(2~0x(kL=Owt!N#; zE}iep)16Q2^$ZC}2uv0LMe$Iy50#!JEV_D6ML7Fp1ucI_exhT%zZZriz z+nQyK0$R#h?wgFq>;$%=c*r3{Xyqb=lV<-5tm6FTBUqsV>$s$rR68J;3&gV$ab}14#(lO&@qISe;bVUOB zbuDUV-77dEQkVE~e;9%sGp@Zodj(VD=a5d|58A9_XHef#(g}Py?nq#CsAWsI-?DVOIrXbAaqwJXtSWG!@{xxFl#}kH5HB~ z1mX}d%hdI3*SZ5b{!8KP2rOj*R$GjrmLQVWQ_ka%cjG=yPv_s=UhjsI-S|HQ%zUsb zFZPLcM;rGk(>H}atyR)iwiZ!^VEca^>uvWFF@>El|KmtaQ}0M?p=}`bTt~qlscb}H s`I-f24>>yRF4K?d^XvwG!`z?p7c~-7@0VfV)c^nh07*qoM6N<$g2CwqH~;_u literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_1.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_1.png new file mode 100644 index 0000000000000000000000000000000000000000..cc6032ad33826b2a4aa05d0f644abc6d87efc949 GIT binary patch literal 1076 zcmV-41k3x0P)&dKX|=fPqt%esFNM7pWnyvzfrXk+(+-<5&QW~6QfyYaX)W< zVl)d~0cm25GTBN5Zq6SM&>6)-XJ!U(S{`6?R1Z*G5A_JBcevXVy9Ur7U#w%A_O7?; zSd~85na?U2%9VZQ8UPpISQ}iOy5HufT#Hly_v1e{#B78e~1^5`o!}9 zt+i8;##d{tNs+3W(Q&MSN8o*ql;y^t)umA)@FMuc$#^);wOe&*Mu#rT?qeWzFqUS=kj zPZ?oz#}!5p5`k78?+_mNp>=oya%4u^*^@B>3Sx?MiZdF)?ED(T5`j3Q z&HhfLP24k=2wZ@SC+!9Ui9qeQwlqlM&MP;%I2^4#S-7#d1|YrFlk&7OXgQ?bry0@x zp9L0yUKCFfgi@Y$U6Cid43r228C3vMGGeeq;O2xPfjuq#=Eu@GPe^*#Sl3I(me`EU zlYPkJ3~rFRAL08*G&%Jb6ReYCXZS&(~4Wmlce86j9A z5MZVyASwh)1Uk$x=x2ZWbXs7K=y`&1QFesYoC{Z$<6Uy@C~~dxr2A zL!`BY&)&>l!6#s2wBXPAZE;|FrXx z*wpT2o!gPV3_v2#i{yFNAyGiuDC<1Ui!K|P_RR(|R+P}Y0ByEfWoX(GT@gWs+*cB# zR@q(IIub}f^GcgjrSa4#5%`T3DO;Vb4M5T@^o7t4Y;6D(ZUnm+!uAGW>7E^yh3yUC zIQ&1Ova%7B0epiP!HSdt5V#SnI_oLw%b-;)-XpV*aAwK_5TwZA>b#FbkHPPR_uhO} zewKh;EM8-ESFf?eUklf^o)Zk}0000tl_mwyn|2^G-#Ir~O9F8Qw;Yb1;jwHb0NCHg2ec#u8-|$*1quG1xw0b;90!+f^ z^MTjeb2)j)#pGfMyK3A^w6&xDn0R*tQ5L?ACd*F%XQ#&~NmElf{f zEG2-KrCvrS5&E%Y3y8Y$;`XcwZgqQdYtcj&dWPyj*PilP{Z{*)etR*M06qJ6vGtH3 z+J>yt`d#1Gwk{<4m`Gz@PHF>BKUlvRrV(J2aPyEL+MZS?TCq%!X||{yZ=aa>lR{Cm zjbMrfn4#Ju159n;$8ZA74B2Ye=q;Pz7`g?_j@P}qAkr6)aI4$aM4884jw4bg($@%v z5nyGq#!G@oJ!OkQduw@Ke@keZ!m_K|*6KvU6ZN$P+hhV~fc+_!aPo*U)RwFhty*p3 zto~SIX~7T;uyXa+@Cd`y0vt;Tz$T+Pmz^Z&!mkyLc+`7q96L%6j0D;a>U~>&*LGU+ z2;~84dz2sWpql`m)z^{;u@DtND@meFVnlGt=hpEuyU#FH1Zt^M`6;kgb8UmdGKQyg zO5Jvk;6%c*=NP!4TLVPgItzE$pdtw%hTXP`9neL95tEOeYx|ppoZvW?usjjOG(Zh)FxGnlRz^;ijS5KZ_*WBs=)Sk# zNDOMWt+)y#WSzY!&fMqym`Z@_ z(&KVjCOY}ON6Sf)|1m8JVEZQ9E4}4=bwEp0P`hU>y6}`i<)j<8@)@JF!4v{mtC$UL z#$+>i|2R)J(IW(<9h-bvKWd}blT8tUkt|vLTl?&SNVbk;0P8ZAEh?vlj$35{--c5) z!DE@gC!o36lkv5A0PWNfiMA1$Jj+JQ=y|hx$cEkb;?*7?8VYKeIO~`eiB92#Ch0BvAV#rRs?#n^W-zZhwdFG0(-FY#MiKnjgJt4EqKcWBgk_E6fH=x*?J!Ebs9iBgnBa} zX5ylh%AOkx_jS%E?L1=n_6IR;^W7I$iaPl8>3WjX~ zt6%5Vz~0F9*qsKI0NN{6R;pE&*PiW&6G;FGFlxfk3z&($@Q((VF-awKd&BBFjikQ; XkO~x(GQCul00000NkvXXu0mjfg@`%- literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_11.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_11.png new file mode 100644 index 0000000000000000000000000000000000000000..3d94c89103c538422a75bf4cfcbb919f4997c1fe GIT binary patch literal 1231 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 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_14.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_14.png new file mode 100644 index 0000000000000000000000000000000000000000..42f844d3d73b33f409350c8b9bdb4b12d17202ea GIT binary patch literal 968 zcmV;(12_DMP)A%9 zh#sIJ-MiBD)GyF`UhDr{J<&bLsKBqjE?ogoXvc9`0Vh1TPpQluBi`GYQf8bH#Zham z+)P#U2z&wzj0P7(7Nh{`?W5t!0Ld5_RF)v)#L%n%kam`os6E}25tmj}hfju>8`)S9bf;m%&<#PL2)ULJf%CS|7 z_>nTOEm~R9Fr)RKIRkK&OO4T@TDsUCGia$7%jASL?J9xVDX}z8yffK=S20+t?iqwV@ zdMwTe_Ub{ji_aOytNB*v)B3I1fD?g90KJprB959ME;_MHi}B*h(oE%3tT2-~DuOhD z6U^K#+=aD0ZND^un`07yWZLL$Hl!=)@uJbt)h;XxWSfAFZQg(TgD1u89ILPYh-_y1+tT246Mppom@k536%$l~XX9}(6(NnM2EJej-0&#usu7KN5iqetC zvDUVE%IvZF`0pi6pp&-dHusJD!%}D`lP6_~sG|6LmBA5c$oD=}iq9#%%&`1F= zw5NYNh#&<(klsyieA!;#wf qx68JOLGm#KXeXK5;&py0rThSM<-`HmF98bx0000A%9 zh#sIJ-MiBD)GyF`UhDr{J<&bLsKBqjE?ogoXvc9`0Vh1TPpQluBi`GYQf8bH#Zham z+)P#U2z&wzj0P7(7Nh{`?W5t!0Ld5_RF)v)#L%n%kam`os6E}25tmj}hfju>8`)S9bf;m%&<#PL2)ULJf%CS|7 z_>nTOEm~R9Fr)RKIRkK&OO4T@TDsUCGia$7%jASL?J9xVDX}z8yffK=S20+t?iqwV@ zdMwTe_Ub{ji_aOytNB*v)B3I1fD?g90KJprB959ME;_MHi}B*h(oE%3tT2-~DuOhD z6U^K#+=aD0ZND^un`07yWZLL$Hl!=)@uJbt)h;XxWSfAFZQg(TgD1u89ILPYh-_y1+tT246Mppom@k536%$l~XX9}(6(NnM2EJej-0&#usu7KN5iqetC zvDUVE%IvZF`0pi6pp&-dHusJD!%}D`lP6_~sG|6LmBA5c$oZ&ZuqSB%!QYO&I z48YKy{_P-w6aYbbH!-phTrY$~MtYP@vq8jbkr{x{d+j~qu#f@(dau1j6M^_RcsKWt z(6k@<8%3D`6lf-h6!ny|l+Uyl^+ZR(YZEE@OCdu*v=h6MXyZO5hX5l{10;Vsc5}=> t9I1_eyKIXXBp*Y7c9OX*Ugwum$`2~Y#{v3|vJwCQ002ovPDHLkV1kB4%v}Hg literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_16.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_16.png new file mode 100644 index 0000000000000000000000000000000000000000..2f4b3b839c503640240c59136155cdfe758c9b68 GIT binary patch literal 1160 zcmV;31b6$1P)oDIln*A>5bA7&Qu41kAKo zt+kfKYw>6I01|ugxi7Bk+BuHUfJXK-Ie$v|JE+_V{BXsLt;-&dfK(3UHQ~p zupA`|falNE0VgQC7o~r$4l{=es_kF>M&5c-iaB)^IY{(9$qS6C12GGA+2i-ex)FZ^J>k+aX*rP zd-|a6L-d4yoRvFa5iNNq&_WhTxY8K|RYyAc<>Ypf_5sc(H zX80u9K1}ZfLWjw6@L+}Zcvi|pO6C@y{I%*!WgMuj?nIcJKwNH7uJ&lP)n`jF)DbW& z$K-0&$M>v+?j^#igC>&`2)}E?n_lcbW#cTyXn&S@^*FdzEO7!Y=Cox6D1lHWT`HIQ z)*Nt+5W>2$y|JQhh_y-{a_d!D}q)!=U@RCv#^-ZyV{Q z4Q=~V6z&PQ_*70HG(VcusaD|H!D`Jqr$oH6xhPaAFa%i!<&MVxafH&-=t1v^B9Le&hVT)j0 z{i`tD0-W+fg%+!Xf2u{CN`O-**}|JbK#XYwc-qRx*hK=*=V|7YKEOYCzZ!Nbk^lhs zxcd!A0wDCHyPu3C00Nczj!c9k005=@8&Qdne<+fG?%c1_qk*yyzyy0HNMe<_{kS3Y;;witB aQoaC!`qv1i-WbgQ0000 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_17.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_17.png new file mode 100644 index 0000000000000000000000000000000000000000..7cba6f7953b0656c3d11da53f55e2ce398f276ba GIT binary patch literal 1082 zcmV-A1jYM_P)`6pHRCt{2UD=N0APl5e`Tt*LA9j&EHMX${NrQ1ottJUqpnPEH znNO{?mc+66^X(2KzKg3RKA+Dw`w<#c$*wleS1JEGm6qT+wDDbWoG*H@8aoru$iSC1p5`6Z!bO}H~Cyvt!81Ue}r8-ZPc<*FNn(+=PKDE}$ zMXI7p;2S`}XyAm%0!e^+c{I2*Kw=CiR2CuQ$kCI2)DRXjn4CatTyhGfZ>_B6BwCzL zsa;Ha`Y!d&1DuGa1tfTSEY}fiX)3!E+3$Q+xGP~%GE=kS^8ix zL!8Ot>eziE5mqzMFdPY7Wx%{IEYz&RwqzM+mHo z>w{!YaJSEsKQhdF0o;AhAX)NSNYy)UK>H3~00!DlVKgKG2&D6Zk%^E5_z!8jm}-NFL`VVRE`ACQQLRMcE0GB+0>al&&5y7 zrqBpThBb?^We~VIe>^~C7KN_N3f?q5z~-a?Hm50oQp$%btH<;_zph>5_gnd`;65Xu z#sC#|uW8v}uNgv#(5F?Ys(XxK-ArLV@K_D+&3ktPQ>s~8JM1oJP zTz>4SyH+<3yd$a?&;n-uQ}3xiRyoo==rh1UU`tI_I_qApU@0i%`ATUJwOjQYIksvR z-;)QgiVIWk}Al2*#JYsfwPxK;m|tlx_(2B`3c>gm8*IIRfJ+d^7S)zWF# zX&&fG=PG!grF$iC7Uhqy!k%r}2*5!gcc1(iLD~uP?2bwGsrUBOh38>i*Yb!UgjcqM zy`9su#~`JVj$3&|=u}U9;(8~LH>kI<(4DO0JzVbu(trt7SWj?;ZqHgPk=6>OKH{Jt{|{}r=P8Rdx z=_3jQ@&MAyAQtG3RL?9zTFaN}s-35^m{y?2&q?)J9cUWJk3E|wBO45fC0fHlPd?E) zo$^Q!II_{c>2{@nlb(;jW3zzO$ID1_eGV0N{%V*&^v>kk|cU5ulXB+MT zR&AJ_876?0E&n*;t?_fTXUo44v^gn&%}D`lP6~jrdMrah7UWU@o09@y^t@%fGARIo zx>LD>2vPt9-swAdgA~9o+7>tU1`&mj0w7p#JVhNAQUHwBYj4p+pzZ}kT@y#KegP&@ z+oT6Dpq?O-)l;tH_;hPgAG8`7>0000JD7EIkh4~|*uxD8|0$>ry(!3F)N^~m*op0#EotrZRNj#orrD{A?E%lXn= zf~M##rEl3r%g+onQ{57Qd>;iej6%v-?P;~etL!6<1W>?>L3O)l=FW@Wb2P$uwTf0g zA~B#0AUzCX0bP;m8AV8Q`BGc8{d5%55_)`})SlG=4FmbMXYpiYhap;`bvx*>6V2%q zkBGpLo%YSND+x}zKLQ>b1+0F*j5OBgpv2Bs!vsWkKGieB39xc{L`CkZ3RNdSh{V{g$&psoc(ofAi4y#N!b zZ>E19K#RhW_B5OP-XF>F71wcmrnTA98}f?SU3->I-Z#-m@IM30bYZQI?peA;ZPsn= zSTsy00#V04;S@{h&lDgdG2Oq8^>*|V?T#Gr9PmGmv?6oFvEKWu^vE`{54Fo*D2axT pTR`izsHcvN6j!4i74?mviXX-Ej{7HGalZfn002ovPDHLkV1j2C2VnpJ literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_2.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c259b5a5ad1e5a3013bfb1723c644192974fd6aa GIT binary patch literal 1122 zcmV-o1fBbdP)t<)mm$kb?zpF zJ0Ychqh1dgi&ZCzkOwH}&;+juOHvNY18|Ntstl$A&;d~QjN&_OC%Jb1zB3;`3p^ID zc>q3sR2K=HDnoQGLnKgp#+5+2M{QOHpZJmSAlI(F3n^WcL%H$*h`mw)S_~g86<4-? z?#-@JW-3U}{BXfXzN1LsAf!Qm6Nr9MXpr2Y)sANz zXXOTW3!nBI2?<^$Fcm;z_R=%d#@o*G-ly@D@M-^EZ{Sq|Hwn}d6P!Qr&e8I3l(;;J z8CEV=DnXGzCuZEo@P3b$VlNVy2$Hgdwu9+Q_%G_fYO9e&UPr4hU29}BV#zaFe*{{{ z2$4YRg`P>$2%#r)==lz*u64g6MiOaUJ}wU+?d?m?toz7^c|41!FR5+Bnpd@Y4rsJR z0(H#p{ztNeRJKI|7suH!;LZf{dx-@0dyV*c>+o{zJ)ZW`^K6imCA=Gm)|6W4u(Z_L z9=3=cYLB+43m>=?z?wMpj0;{84lU=_Z5^(NlFn#6pFRFxfg*tlR#AX6M6gKU1~@|m zPh|qHBxY8|uW${*%Ro=2P0QMOh?&&S(;+B}0)|2WB4*rrN6re)GU0SAPb=Xa2>)pq zFGJUwg9c6qkP=fXtn)`f6?^zRfM!t^vE%pJghzzo=~p77-f!{r zH9Pp&pmAo+1ny@2Xt|B*^y`$Fz}1KY0d=R)lcCkhCKi$eGksLma02qn-HL7`%t;H z?9IRppa)n%^P?83DTw3=v^Kk7Sr2fvd#0XXcdMs(9|t~&F*8PlZ;g%5!|vAKTKj~6 zl?EGC(ugoK#C?k8Lcq5zGn4R-W5ItNJ1Ttd_%dvUQMmtcq-J?{Jv$>5YnLoT%$M*Z o1Xu?zo_sbcAbv1ZOA2MgUtl%O-@u_QY5)KL07*qoM6N<$g5zNe)&Kwi literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_20.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_20.png new file mode 100644 index 0000000000000000000000000000000000000000..ae6e765320468d8e8f2d65e5f7733beb50428158 GIT binary patch literal 1153 zcmV-{1b+L8P)#%BkmJr|;KQF=waEoupim?hM!0c}SLXKz>{6ra+ zJlK(t;SGx6%`*ZTm-JfjG(Tmkwv9BQA__782Y+B`>nqEsMc z55N^)^Gv*Ld&>TyEutmQ)DM@xdtO5lyJCqer?LIvOo5dBg|=Hi!fUaoKg z-1B}c(Bldvz&-Du2N(ge-uQW9$x3A8*un^qvG^A}!W7^l7N|)EIR;wfpCic|RU~81 z5CUk5KfCFgwUe~X3{4)=u|WdzEI^_Fp5&~3QTq{#omKgIms__2aK)#RnFT+(2e0i< zPy;GXNzVP%cVy0P0&vB*r~&stBr^$+IjXWjK zl1j=3=W}(=ZCkaEVkCe>{v+1m>bw1I=Fjp5lB6%^Gcsp10nDcW>DsTg*+N?|nO@fJp%)YrhnnY>(PV>_kDcK||#> ziUF0c=@j5CdT*zN^r8eMsa9Avf)VFpDewvelCyvNt;Z_CM zjXI#&E|pfotpFBy27I*JkMgInkC>%iB3kO9CcsGkJsUvDZys1@xmO*cb3vF31n`Ogx_`#P;FE@lr3%ms9302t^Y~;B65ocOaUzW z0B#1Qx#09Sxn zke>B!)Gtf%D>CIAMgU3i+aPA-sJ5uStxu_K%8nOOe^kz#9cpYmODWm51Smio1o!{U z#|#pm5<6N*ZF|;e>sV@h{ApX93Lq^AVh_;U86~=ES+HzaJw7zHQYgSIAnSVA`u4;U z1ujmHEl(_L+Y+b%Tu|2K!5YIVcw}DE*5m(A+X7I4s11t5XSU+Eux>(;O9zKvmfqa{ T$gmm!00000NkvXXu0mjf=(QI2 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_21.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_21.png new file mode 100644 index 0000000000000000000000000000000000000000..e97affd7e33ad404e249fcc1f0c9e1251539a653 GIT binary patch literal 1134 zcmV-!1d;oRP)c%G;A-j_dDz@AYcY2SMn+dGY~=mAjhCSXqX{4)!l=lT0DJJJ$hm-JhZod~@p zTmq=_PKC4&3)`zcGa-!vtY*AN0-}*k5mFFuWbrMW0H2ur7a4pECBP>q|3$Q~ zVFak;|3jqDAq1%8|3sAU#|aRT{MQBt5rm8&!BGO#%-`d5ERGSNl26CUm>eNMC7+K| zu{lD3N`791DL`S56LE4UKqX%X?|8Wq09yMCJb048jQ~~n-2oQ@WJ|upb~d&0ik%Aq zG9|x&z^zewIIRPs9cfphZm3)6#$JCSnwdM1HXB^!Xph%#@N=YqMz>ENx{6~^N zvlK-W_=If}0$|C1fA77Q8W1tY3L>wS3YZXJC;M5{;0BEGx#lv6QvJ^)C?foiIVRV9 zAAqyTe7JU_FBiU5@4Yt-OG0K7p>{L0ty8MYhHsDOG2fJnemgVj5bEvOBZ zd{S_2NcpW_?FCS-?VYXvg}5EmgE*BkGZvx^Z{zES#?LbMHp)_(4QASr|1 z9iLlCsua88Q{tP{wgw^s>}I~#jKy{W8U>QJ79 zO#qAJtIn<$)xMWKPX89OG=hj~1!zrI$WT7hKsw8{>fr60)zL6}7ho;_zeRpmxWP9Q z1t{E$kQ$(n2c-ZXj#7XRhlv7kzZfz0#j$%6EPb;)LZ0EK0OPG0c5F*=Vt)U`r4I+t zm?XZ9@V*LeO|T85oCJ=~umh6u9qgEQY@fOA7{_Meo8|R3gk$Fb(u)x2`gb)Z$S#Gb zoM+H;?p1IGB{Ne1X<;b6G_hJ^rO#IHYHvrWuv`{gYXGlf-7IVWj2nG6JqMUSvkV9n zh{)|IB?cNm%b%5MwZSw%;#M{SZp|icOyV+bQ0_mjSW<W}?qB@44l86#z4K#<0g zW8=rWO{oCXglOfOavlJU(E}JEtk!R7{5S;o22^Z~6n|FY3;+NC07*qoM6N<$f>!_r Axc~qF literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_22.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_22.png new file mode 100644 index 0000000000000000000000000000000000000000..b5c615924320e84de411f7440a52ac039ccf72e9 GIT binary patch literal 1021 zcmVh_d{!&qSPKt;!{GsNI6MFjhX=sn@Bla*9sq~K1K@CY02~evfWzSda5y{w4#$;} ze-?ByJOdn#3;q&gT&0J@5HRa|1~?qw43O`B?+MM{b{u@ghe6iCXmxj5pt=acUOBW@ zGqeQHjyh53XKjfor9_Qp%`TPN@KAZRr+^mEj2$C-jq+r^xYH7Vb76MIlkB)cSU3N} zh7!I9SEIG2vn7Y4pL7N&bu0BRd0MuN=r+Sc-UMpRsHL-O&acVC-q+p(w0L^Xr`R&0 z+YHY~OE?7_=ZCO&_swxWq?58|WQU--2&KdqASgOQqJ%3T1)|uPpXWK+Ede!!eh1v z(75w==oK`28B5zPEJ|iJOeLRI!-tJyTphVQr4CYd^>zqcJuyD?%b}y=UyV;I2uc~+ zb90SnC%Z5`Yfza2ten3Ko@|%;9^mcH522j_q~zwGHGn=AKDzxo$@wAR_ReBZw~lY{*G)v(%Y3Ca=zn~OCr&gcR}f(Pdvs z>A03W%Mt+pW@R@gz5$hAhry|AT?D187|zPRaQLf!nBoIh*RK00000NkvXXu0mjfVmZ(w literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_23.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_23.png new file mode 100644 index 0000000000000000000000000000000000000000..ef4876275d1b45266fc7b2d6c72f04eb52b30bbd GIT binary patch literal 929 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 B)Or8_ literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_26.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_26.png new file mode 100644 index 0000000000000000000000000000000000000000..379e29b50da74d40cbe316425e68671a6047b9f4 GIT binary patch literal 1408 zcmV-`1%LX9P)1RCt{2TkUQvAqdrG-v5>7{^)hXGJK1!TRlm$=?p3e9KmgC zDdjE)+v4Zb3LJbECjd6b34qOU0$_8T0N5NS05-=7fX#6NU~`-R*c>MSHpdBo&2a)? zb6od*z6;tJhXFRn1%IiveoBvniGZws7+`a}7@%eUsR{lzYOST#`ttMJ5dfX99S1m2 zj{JAX-}n6{dr`tLLO4K~5%R0)^OxiyF6#s{03#FXvx073Q2KNB%|>H^`@Ww=;OK0Y z=4{GgnriRc&&uHRZ2QF7=LMX@G9M?yb^%S8`}D|D0R!jJ3Q%qHB06Q;i|x>yg5OgP z&GZ3>`n#UJ_-hJM3wz`-Ekas?G8Dt$XPnGv8}M^VXUPsu_fa-b`aX)l2%US!XwJ6+ zGDDV55qXcpsd+fr(KeJ4xC!iyIy{cr04*!v7%8(d?ci7l(k!HIEU!5_!eS9S@R-M! zK{E?LEmNZN&u+W8^BmR!qnI^f2b_P}RWL4=a27|AQBg<1=^t@8R~V1RD*#5ee_X}v zrT-Nn(LIJWSUri++YSzA0Ik)@rvDj`=)aVw1HI17Vn++eiy-OKB8%T!3nIUz z7R>=1D{2Lw72MH~Wy_Cc0Od&B%1L9m%6(LHXC=fsUV2-{oI^X zJBjs;-UnQs^VHG-NHpJ*1)lSNL`TEPNXJ`N);HjQ=&`5C{fu@#)#6FfxpMVSL8@uE zV<0lWHb=DUNNWS7%-87un;~U-PoXP~%`Bi(?*S~EA<^hJ!ovX6xKHE9+Acs)hL%DX zFHmMS{YPxF$l`Gx2FN%DsAmzIYOTM24`5LMPmHTkt$(#JK<|6Xc#lmUc}g#9As8uW zBkXAjw9vnXY0j6be{M6f;hi(8gJd^+&#l>Ozt(PQxTGlIvV^K^Et_EJATnUBfP2TZ zXV&1Co>|uRFb00cL1X}_{o{=0&L!)a>P3`MB-^ZOWd^@xZ7kd7gY)CHG~3Ak3$Owz zg^vXcDJrGlShYK#Hd$hTCWq&M;P!}<%Sfhh0C+DRtjgkS&Ss1e&={b};Aa?CTe%`T z0yY3N8o?Rtse&b=wCovGH1>dUK4%9+uN{;R;Cj@NfDyU~!cnI=-C}4{w*6oO;XEq^ z1Es50JVP6M*OvCn0`czwC}^!;Mr+gNr#6aWC60Er&#W=HFr@U&+7}Km+bOVi73LyH zYu83Pp97U;-nIvi&ln>y){K3@I#KJefpI&uvO0gXu`5tNg-`Db*24mG4X}#yOIhcO z6bR4$jD}~O$4#K*ycL{p!K@>ojg#&JR@)zJ=i??&I#X9+07+l#`dXVCS!<>Jq1K|- zR*!&{oxd7Z+aJqOV5$K;&Yy9{tr%#YV_+qS0pKnCRyA@aR@)!A9+fnYe-HOYvi1oT z*#Xg{;pVbJ+FxnCONvU1b8(TuDJ2=>2@V{jl8h$_3=^OL O0000txvo8u(F<~RwkIZgs>j*|eJ<0Qc5 zxJo(S1?`N(0Gs227dhvr^f;IZ$ohu?HpiO*>h3>1!EYnyoN~_ZIDeD?7<{c9;6yp{ z-yvU0`H;ORVVEHtpv;l~E_sNTb%KN60c3$&6F4IK4*CNI5!1RR55b-SsxbHIk*5*{ z&r{{7W|XUUEjo>|m(v-JgLc+?R6u*ifJ6Sfp1t{_jEgobFe&ggrxPC2Tc;LzN;hl= zcTF*AZyP9mZV50O)Q*=NvwF#ql9>zgQ}*PX{ci$WvyK{DDKFw2?)}9~2EfmtJ)CWn zEXIs@+`bGN(Ev*Hra4HP)4J1I?eOemSkoQO7^7o7Z;8>a`w23U)M@9`>-VgJq_C8N?lVTC*G*KMQbO=~(O4 z3C}Z?0q~-|&d%Jumbzy}Z(F2wtaNWpdMU9q{akjJQi?UxtQ{wJ9=3MJPw!m?hWSnIJ4qRP|9{D1jwFfQC19hW*rq=SX9X?iC z0p3Y1-7J;G-atk%ivj90in612Qhw6KeGX}cEGJ;;C)LY7~O0Z7LiVAl5HXbNE1stpW6W( zGxUUYPR(haFDy8z>ndDcPg@<){tc_cm+NXU{QsJmn{Dj#lQP zV!_FgcBMrBzW}XPjX3g9MnQe3wXNf+`Ff1us8|a4sFEcy0n0eWp~;NkOKVcsD?!qA zlz%uqtZTS?fSJLs>!n0@zN?}7fTI3c!S~`;0^BuZLK0AV;GeOKh8`sVj-z^kC;S8T zviRm!0=ULzh2Tp%QqQ7uSjI@#EBcALPDyza7%^^le4C%tSHYgf&qAZWj+OjmSxZa+ zZ}3;j?5D7rpR^?SNB~MXZx1jUD<_(#cX~=cy!P!^!YZN-;7sG#mmA0??z43ar^jl3 zg6qMbbIzZ~z)>08bH`#GRyhXN=aI50v6{!%nxCook#7R6i{ev)^%*CpVP*P<=-D{; z@G;iqLsu;UxJ9grNeXffkaokjB!DN_9zR%mG1P90Y)@1QH7=8ue|#!u&yKep%%c{ Z{Q<|V0t{JT*ZBYd002ovPDHLkV1jSOji3Mk literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_28.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_28.png new file mode 100644 index 0000000000000000000000000000000000000000..7685c3bc3f7e9dcc355b0509a3cc78787b3ce434 GIT binary patch literal 1882 zcmV-g2c`IlP)Y^Lq$%zQ47nz@^=XOD z?z%3^vMs;(v3Pu1fnR(UzX|Ze@tXiY9M4Y*-?mr!v99ZfH2DnfVE?*&fCNUvccb@v zjuW!u+<7x`REKPD$NrhPyahxZ>xgqcksOG$&FtmMm&(^&98LhnW;1f|T?16`(fU__1wDTr36iP;uCF_o zQUP{_km6BE6nrNc*cdmF;;xxFKH8&_Vid~eSqcA~RZ3LmyTtE^E>05d;~Y7i@yb3o zf!O`CxzXVY;AZ4#<{sVsajYx9!|Yj$I-AhVTL0x$aCgCMd~O9<$@n~Hf0pfXg%RTD z%**ASIUJ2gHdO6V+3)fz7jd283NVuG%wS}^LRC#%;@Fj;n7OMHlaeuW!lhc9HsXMQFRs|o;bCSi?xf&na0Mkjyd9eOmE#w&K zJkMiYupXYvB1_O*o+~?%zWI5U$v8kaaXWBg7xj1}fo>4k&Om)n5hfRmG@|=42~eP2 zT@b;o2w{FU%YJu!cg@zDKo(r5Y_i?jAy{la(ld`!wx}@`7hw7*0*Rg}KaBWDA+GcG zpFx!nml&ZE)Rm=_?>M9)oX%QK5}?XdB{|cr8iUqBdZ@LxZ5w+PTm|0|p6}(}jpTLp zn*~;}s-UuDamZ+OZx;S1KzBzeBXYTO`|!SAW$^3(yQtbhHQrf2{;d3#lc{UNj^PTx z6jS%Bd(mjtI;!BGl^j*@E5exV+dm^Y&b@g5NQHneg4A^eqjlFr!QZc}RI>5ts&qnQ zRnXOV1eEA*ARSIq*|Ou|OhBZBDS>vbQjR^3hAM8r&`IR3%a(E*QPH2VTl@bMbAg&vav^Pe=@}!;c;%oUX=`W9Lqbw zHO}EFN7g_Ufc1U!+#!aQ|CB%6n67`XwS!oh{=ZN`kkq8p23e z)+^56?~hiZEL&9!RL;>{r|ciW$of_Sus(K1@R985G=R|M4y>nloyvkf+b^#ye-uns)-&1==XKU(b4NDC z6%{~nkhihU5#VmY-*sYrnGrrmw{8+Jxp(vr!c%3)Xz#zW*X>YcU!4Hr{LG-yIOqP| z{G(!AR)9N}xvK25*1$eH>p42y#Xn3(1nU&=X#$vaarMmiU7*(C=x_)BbYUL@@08&c zTc0IgkxVA@+mb+jQDii%d%XggK|9lyxm2RNccoXh^rgtPmZee7995)rCkqe?m3M`$jKF?|uFN?%+6&8x;JsO(jJ z6z$TgROhwX7_=^u?d&UHo}eD~XfFHQ)q#z5cAnD$9KGD+ zWM!Cbt~@652-fF2zFQXXmqCc|I0`z#5Y$@ee4Xbw`ZC=Z$#dqgd8l2gU9Jde1+^Bc z+(_T@JpfV&5sQjwbr?C);m)N$Lz1qd3b4STxtZ*-F+=YG)I_)J*8>5^jx_KvMGk!t^xYDnG0J8J$ Ul%@YR0ssI207*qoM6N<$f+5DWo&W#< literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_29.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_29.png new file mode 100644 index 0000000000000000000000000000000000000000..5f114a4792484666f993282c843792cedddc0000 GIT binary patch literal 1757 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 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_30.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_30.png new file mode 100644 index 0000000000000000000000000000000000000000..645ffa6692bd5d8b4dfd364b80f5126d1a30ebc4 GIT binary patch literal 1426 zcmV;D1#S9?P))Xn>;PCCI{+5P4uHk617LCN09YJ5 z02aqP=lxmG%GeCBINtJyl+s;xY)ph?{mlT2{z?JT`B6I1 zfwJX)Lq6yHCHqFgGD0j!nJxcY@)9q0fQ`Qc$pWV$a76TN^oMk!ru9f(!aM~OVe45V zj{>H4{N6Ur9GmHb96H6O|N8jiuNa6F_mZEX<7x7D=twD@17Kqvq?GD!0)HX0N9cH> zO+EUYJ`5UB0FFN5%+T>fn_6`gLVdCwZzS!d`TeV$-buQjfc%{gZ_n(wGmnLcRuk3I#A&@r=5>6i8;z}k2p$Gph& zAPboudY-@lwR)`e8tEVUCh+PR)iX?APhQnC`W~Rww%T+0aqyd{b=|0M1@}7sMY}xb zy!6r1+Az$Tl#@wWL#AKO8Gj+91t@aSj*-=FY5&W23vxc*+z`XeK$ifJ&PC2d?ONtI zj+2b+kD%qAh+0ZVEE%QJEAxL{IcG}aEN5En7UU(1W()nY&d%D-yY2xbB}<#pIGVye z=y9Xe>fSvZ#J`F2@=_Fu(zu#J%A!O|M{NZ?@)TgPAR`m4hb6-n+!{@P8m1=|O`wJW ztZ_UYa(o?-tj;UzfDk#hrQWG^GBf_WW&pjL<$F|pdQqz#b|sH#%C&SbbMwHk3_Gr6 zSB-v_Q9V5_14L2mIaiP2v4ieY6AT{BdgHYmZJD$bZ4zV~bA0oPY)gijThph3tWzzc z5Ne7aYsaG$P`k@mAV-&0WE zr9)&JvjIxG$9T2#HSYneNqY1iF@vWI>1FJh35#+qCbH51lQunAvMmKTbrFQB{$9>U zhDSveTerwDdIb%dXXI3Co!B|m*j78{=TF1X6Aj+m`3Qv$^$ug5U$cYs@1iHtW6`^O z>ak>dFE*3whS&$r>o6{YyvlZ@^DQ7swPf^rrazN6qn#WD-<|7L-k;iYpuNWVvnPWb zjBGFV_q0Qf%M^Ih##!qn?X~o{0q`W}OPj3X>P|4s@Pu_c{r*rXz@p8k1OcKkD;?*G+qACJG0-cVT9tZenY`!x z5sPYV2BbpTiGv=P>XYXd^|kXMmi>24m#(t2-Nwq1W27`4j-KP;i`$jyjgXRuFlJ9B7?X zqR6j78!OzcAmZx<|(}bX`DyZrM-qN^mzKoEWRbeLWj8nUNqrC4qG_v37!=ydS`6$5ATp~tg5v?KoLWq|J z5LhF1UPkF8%H4=kE&7!@S=$&e1t($v?bO!dPtV=*6;uD5z7K#R&!SfJL@#OBRhB4y zd*t>Out6NPM}4I(4{}Ydc4U9SJBrSlr-i6u)pAkp^r%>~NN;G}UUAz}19)lnYT%>v z`gIdH!uhOW9;~#0cFHVvh}OZY0oWiNwccO${nv9oLd*^VX_y3J1%@3)?0%`k%HvEB gcw^37@08N<4-kuSBaar`fdBvi07*qoM6N<$f?RsI2><{9 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_31.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_31.png new file mode 100644 index 0000000000000000000000000000000000000000..a086ba60c4f2350f6f42933de30d1fa9baded7cb GIT binary patch literal 1423 zcmV;A1#tR_P)h}0NVXKC-`lYQjSu}>F1XtfIHti4kS^w z{CCLLT3=+JNSHH31DDzI-zCrShz_vvJK#~^EeRaKzK#CiPLyHYljl&Y020=o8F@sQ z?D)NHnmKl)4|3=foBr#ICx2uhQrt^^hK^5@ze7hU<(&W<>!6g9zX|*XW{=SEi8l4< z^Y&rThy?Iz$ue5UsKobEbr5Q;K%QTdsPEG^kuQg7|)>>;ctd7W1 zdALXNvagia`i!muT6K8i%&G*aU-^VffR@VOo8ggnCZ5M}o&9K6qJEJ+2-?n%+J`VB z0%&^B&8wAMkGu~E-vmZNu1t=+u+IBf6Uj!0(f0t+KAC=+J)`aeNbZpx9F-c0bMY`+!pZJ`R@3 zxe!Y1%6q~D3Q_Hc=lx0<0S&1u;1!*3);f8CXp>s zArgw^Jh`pbxN=^yEgJ12ZAe#UJ>V~cMmirEn_1kMAs@}t+hq}FW#*x+b0#0MaQ-ep zDjVf|3CilPj?p7m(Z-b#Kd{)aDVTw>=&SIY1F_x zqX&>vWqX7K96jdSGA29%yev{2T4TES`V4CSFb-nS+!L#Vfi zTHhJ4&UEelyN&@3=S^VriT()OVOJP!?RYKWx^odV`!de&v2Ia2Ii68wT8kUasJ#e* zIC5K8vKXFUhqy z8?BFQM-E5P2(|I~nK{4+AmdQGHbF#;5jK(zu2+jdXg*h*uQ|`M(;^CQleRx+g@4U> ztxZly+A|{xSP3!TQQEPk?NlzK>7(|mME3}2<^UsM?G7(<9gWQKBj;hA_2?+EbYzlQ dD@s^I`v>s;WD4OutKa|t002ovPDHLkV1oauug?Gg literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_32.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_32.png new file mode 100644 index 0000000000000000000000000000000000000000..4fdc011d11f1d6ea03fbee392d145548409840dc GIT binary patch literal 1482 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 UXfJx1^Z)<=07*qoM6N<$f};=K2LJ#7 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_34.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_34.png new file mode 100644 index 0000000000000000000000000000000000000000..e13f825fa75c0fc72347ebf71fc55b8c4ab086f0 GIT binary patch literal 1539 zcmV+e2K@PnP)_=A0kjdBMruVZIg5a|b1=o-44!JS(5aa72JRNb&;fnQ@GatQ8TC zgG=t5b86&!22Uwdw34B|RSr<4SC`Q-u>C?2fD#6UMwD6=zAybM9H2|TDx+)mNk;(d zgsjT0*t2(c06dPz_)&da5g-F?A}bQMCpiEdi$k>zWCW;&G^tgjW*y*e<9CjK9LG32 zCn?FzBskxMI~U2Ef9e3;gK+riPH=aG9Ak`Eq?6ZhQi8K`pWOx4{XW987iI^bl(7zI znaHaB_HJ0Y7{kwRq;4TPK*s1?ABli$H0XAsjQq|c9>uTK8Au1HET>{v&bwAexI1cC z#_vAcOLDL?P-Fb#0G)=9;K}*H4hb&KB`7{$@CEL;N-+(T;yVyL#%B~*k+^vwIl?i< zm{j9csJ!r?zN;(*RXgGxkqztn-U2$48%cKd){8?$e$aVuVUd~TmTM2?zV8A&@E$iT z?K7dXWA$@#Dx!e3I9A22)bADP6!AJu#){jpE>!5=$t~CKIF8?!L0aREY@Cy6sgl7} z*}3{Td3a3gb*^-8zk*u|Y9+9H55)4N69Q%YJE8#|A77_)?J-t!OW~AWt{_+}(`Dqe3b}ptgN< z09Wxch@APm`I7+WELH-g0VU;O^$vf>{ak5mykAP~D&<*WWJch2fK0AHIR zUOqhSU4<#a_49uTyCC(|4N=bKV#rz@}FM{wFv1>)+92lBv~`&>UNTjt4iNi+r1rNjPcRKN=P-d zm9Xpn4`I>2lRpX6xF-xl*YgVVoT5_VCsnYxHgMc08-EPBC`5&R_>THcYlGimKwDC_ zKA~4~dlTgh+}>l&gsJyWH~s~y6KIt{44C*yi;y!qW$PFBf-(x;3%!P=ve$~Fk3vP5 z?Q%NG2_&94+h85J??fB_ZtpXKG`N=pEQcD)llVdTS!88uy5mLQfo6C~ANWlDhY?c7 zYf;*&u=Jji-G#__k$GD9^T?ORd`EyNyb5@|mFsVj(Fuz|GQP#}k_S4URIYE@H1efHj6E8-EPjoeFHT1^1N^;1ZfWw&8v73C16TF7-;qEr?8Rl)>`f3dWv4 p=ln1}SH0R9QYDoFHSas-_zQ_vOBJt~Ay2_Xd6 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 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_39.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_39.png new file mode 100644 index 0000000000000000000000000000000000000000..7ca97b4a7de316242b68d76e29ae0e8db3c1b98c GIT binary patch literal 1780 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 U6Nnm72LJ#707*qoM6N<$g7&RSr~m)} literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_41.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_41.png new file mode 100644 index 0000000000000000000000000000000000000000..c33f03e927ae06d8adae5aadaf5259663c9b1d22 GIT binary patch literal 1770 zcmVM0AOH&rTKua@^xZ&v z_9FMD6Ej6TmfFq?mTLBS4a;~G%q4fr6s@$@XB`gnfl6h zh<0`awxo& zuTo-B%!)2x<}*jPEKXMPnH)+4*a2n+o_;cbvbd;1R76pf5dp3MJlbIukhAeB03Gd!?c1yNmPCA{g3P5m0QISHzh0Q4w^k zso;;%cnVONYLoNC7F({Pqmy^t6L%SLyw5hqdfg+WXDSIQ;E&O83b4T{?9G&R2GSg3 z%B!8vwg_)5JGrdacl)?9mu{;p0hrRR^wHH%NB@oT%I4bmY&Apoc~xR(W2kc^@^}Qu z09VCS1QJ^KF7=EodbSL-NGN;yL(R{|Q!A3R7Lx##gc%ZK{#fr?PxE4W3)r=*P#h*_rd=^7nQE@AFjnkiCK##d$XM|;|D5Of z`DYzpe?~dY`#KiY`mnKV&TF3bGs?fyGLc-3_xTS+swA+WM)N$-vYnL)s}4iJqB!1X zPdK8M(3z{3muk|#4{!y;(ITQs&>h#yWyVLOjCTIK9#yffs@1s(zMTTRhn>NplVnb` z2s`(7nkNELe$4L92vpHpp5Gly|9t=zbXB=CEhNgL%TQj^(Dew2Xif#ZtAynk;+sIW z6tg6V)a+elAH|Nw)MrqBdU2ApR0<7a%nY2NfgK;LGe6h()*_(1XNlG$+6YWFjpFZ={>Z+qFCxI4n2{iJ zZs#*C1XY6y_{^@(fX|-U%aQSCePr!(&AAG`jXOq>0LalyuxlPmB4q*BaTTaFhb$+> zhnJ(xbG_DS>3vd z_jcWRetlJ~v;ZaNsO?10z*b1>3lXi7JB&LkfYJ}YIM}EHicpGTBH?Ha?bzL(sXn{p~dGeyb16y?nrWmHvw+IYLa&zE#CzA#MDlFw9OiqgT=^c$5IIo?HggiT9o<`W|8hhiv*XXr=FV z?Ci!}JDc%2L4tM#_({80I==1PYy9=CWe08r_^HX&xI>t&t|L=LyVc-09WVcS zay9N!;MIEAIJ|^at-#K)qOe1Pb_IAf+hey>S_FIxWGi0I!U@&(u5Hp|`WM zWJemn-eao4OB3J~lPxmeBALW9*ANoC1Oc9SQ^qD}%2wusNj&;*6}``2{N71`r(TJ6 zl8u(zNiZz|)dkrYkxc}6`rY@`?#|BLU1UP7Y6B5LqH2JUV2J=vCt750DbK1wXW5uC z?`5JZ4iNVG`r+qwyRUcy-tcx5}Xq3`QBqogmj1WkZfNwi3>%&sOpEAgu& zUPM`IB zb#wtT9yz*IeyWm>#Lyx@=OJtmh@o|=UPntdLrzvxlmuW(Qxw?r4zCgz zDPwj{FGZ9X_QCrjjr6`FjHO;@YG}&l)g`Ra(nQ37a#(E_o3OoJ9Epr~U76H`g5F^o2_ z^CJC_`9%GrD1Sddv~U)kMJj`9mc^Ag5K(8V9s2Cqy0WExBKac8djQtqj{a2HU`Vi9 zO(sa-3GHrW9ZCN2`ELS|#nZuN3CInbD#`B%oK&vI2yP(rk&i46&yJp#k+WYP1Yd%Lir>NOC}5>-IYk7pY}rek&`UqtdtQ{>dBXUf{JGs80wm8r4-v)Zg?;f#M z0=CGGf>A7$xQhH$b}H?#iruCE!iUKBBVJc%O(5&FQR1_BqompKNQU`6%s(&=X6Fe0??9xEnP_RtNxtXMvhe-@s<&60^Yi^^P!W{MS!l5 zio_8@hAgqs0!PSvRQ@x8o7vX(ndh!BapHmrAm&XV8%$OK5anzW8!79mB_IOP8;^)y j)c49}$b7LCiXq=$4@^al%e$Z*00000NkvXXu0mjfJJC8U literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_43.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_43.png new file mode 100644 index 0000000000000000000000000000000000000000..ff83fe77130ac6925552ed2bdb93eb3d44a187f2 GIT binary patch literal 1004 zcmVX^GWb)Ljemj`I? zv<-L+%cwe7Ti|m+aK4sK{IDXh0RtFXhf_1VwV~SMb92|C+FI{vR(ieH=;y8Hd7f0H zYSoUN3D}oZB+%Q(oY7nvE7b!e4>jkKR##+d04CW<3I)-VjzP2nxgd2G2*(u|o z^6(gVjX^a4X|46>gWaG8LVEkbPy+c&4x_YXO^@d-)Ou>rHyGu0ta&U;J0gdmR!y2ss@0gcsO5+*5Q0Ey*f_}KEB=vBQSXY7{$Zx z#1qA%3@HLn4?etZt<_`*oDsN|0MElQV?s&TwE`0)BxZ$KGAiolCd5x%#u-UqCg zBJct;4Sp$hT>$G15rMc2rm0^}C??P25`j_~^`Qe=n&s2*O3XI)k~fyMWB;aUjMB3m?Cg+*rhf4;m8S_wt&UWmI+n!d z>@)Z(Rw3vTf!fI}ZbuS?-pHZ!kksdBDZMKu55Vnb=fs~iI*6~sr8&=Hxfa#7cMXr| zHBtl`;EaEEEQX$c7$UI4WH3hpaa#HeED1kr9h@(n$I_lEmuMcb&7!E{(fu`$`$G_E zwrGl!`=pG^rFK+%>XWopkHCSC2HZzz-VY#k1XqR!o*EpOk7qZx-u8-4izr{@GzKuEN~=R6`LBY~T9DH1qRm}wEeyNNdYG2F9tMFMfY6t%PN70gK8JGlQagc4?W z_V(-*j5_mX#}o*X;`7|GG{dzxf6o5rND+vLWPDourIe0HU=oY;002cPOYVs>TQLXki#66Zzhw0rIM%KY}= z^LisDK@$Q<0JJC`uNaBYX#t-MJT>^dezZR|AqY8vTI5d4KBTNxX7qk<^T^AaA^La+w{He%cHTQEIx|mi{YF9Bd3YJ9J=3n} zIe^H__VPzG1`2=AN&<^e+rbWAUu4k$^@kw_-cmNxMuquRcCNLy_tyNQU=VMx)}B!vkqBe9K#znAHgq0iNh%%r*C_S;fJ$T`E}enPu}mSZNhffoHkmU=R+xSw(YKX`$kmC?qQQ%>N^ zDFG1BY`=e1!Xl0B>;laQaGCsm2 v_#a1l_U|pvGES0jCcyj1dX{hSTWjqv+PANDt%2s000000NkvXXu0mjf+v?(t literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_45.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_45.png new file mode 100644 index 0000000000000000000000000000000000000000..86630e83aa56102061ad25113ff5fd8240abb336 GIT binary patch literal 645 zcmV;00($+4P)epZT3a35*^uDG8M`O9i{!u=fj533n! zf!x4aWw3D&=$wBQAhC*}JF`PIr2;qy0i0880dOx@+r#YEi~tYP8|HbQS#d_BK!6XD z!b^emR)Jj5T8ds75a0upg0F>@ljGg!zaj$y+(a%29bl~j=0t6UfwP{{gBtQV?Aizad8~wec z^+y0>^qd}sKn1wOuA^SVLEr#8mwyQY7^J5SAb@iaz&Qxe$?m6r8U%0-0vM(BKo9|( zg8&^^>H8Aq1U9hpCwz>802NxMRqqZ06sXOkvm^upWUzLwuaROSfWkxgvbAv*AZQJL zS2^^yaXT0gAmOR>OAx?02;dw9a1H_}EM4Sjxg&@G&Orc0&pU1{fB+eKKZIdt5I~?q z_fQQG;Dro1_i0;JML+<7zEL8v+7=K%QIjBq{x@H)4gzFok-!SY`2dzS@+!LbTihp9 zfHzp45E{a(0?58*aU(~u*7qg9Ex=-Vn~7BkXaUaQt7Dzh{Kb*A=~7-Evp7ipw1C=1 f@|eBwLkQs;lIyo@bh0UDVVe7gP8Y#>Ph0Ss7Sp+~I*5TJq8R{7LOFiZg2NvWFliEWupR{>(j zax>|H%jnL}wMEmO)keRT*#0g8@S;U7EsYRCQy-rtrWKmg!w@=UfST#ao-2@Q+f!11 z-x(YPzVMd0Jcs}R9HQ9`K!C%60EYtslDrX#Co@MBx(ZED+6`#tXWX*M&>06d6NaHT2Y zkt0fKBfa%j=;82;*Znkbr*v5w{9WbXpRMb3@UES78r=lgY2=4+R_dpq5_mY(0(c!M zr=b=gRkV@HrjTTPR02rn>nR~xDrc?Yw7h<|W0xEy^%a!>(wp_@FkXS1T~hYU(g%T3 zk%mj5S@U0l=89VnZ1oKxZxux=W?%6;lBF}iXmaxvUV#9=q~<2*_4gh{fB*z($~vO? zB8HuS0F0ajA?Po@Tpb7?P$GdBAV2~xfu~VVNuCCJvb+Upm5?Wp0SfRIbjlsVr{&-i zZwG&ozg>W5%Rw6K0uBd19eX&%KOC7m0zTz2kAvjjE+F?I@tD8hhY-Ry@~C%}w?mO> P00000NkvXXu0mjfa3ydJ literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_47.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_47.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b4529e448844213c2482c22324c4ab69bfe0d3 GIT binary patch literal 820 zcmV-41Izr0P)mMk+$!O+xenTRbMY5eGt>jQ zj!yxc*J~BXJ6+?Gshir-ra5%*b0BmW^4x=+O1b7i`Fz@@$iqj(n1eiz)UJ95t z3*-XLrO?U%0VYrid@WcxIi7ldiwqFJh+H6e0Bae52e0(mQoyMUH4z|y0lld{_Z`Wy zO46k=bPfnG7#jSMbpWkYyd5P8PzM-@Rq**bYCSsl`IG{5=ae!o8qY^-R$IIScudTp&uGCqx^bI1Uw@Dcp@TcqPy|J_a zoHwo@@-6`m0||WWqPhNlS0KPIG|0KTZFv;|0ucC#5{mZTJi7n^7&Qq(@OO>_0%VX# z-~|X!fJ@-1*Hemzfu1byfzNXCwq1|`1b7QN(f?rqcNs3)Mr ztbR%<sP*KPsHUcU8@&*!sKM`&P>_14ed=lLTlGl3qpe?9i|7yjeTorykQ{DL=! zMu57oyj*NK3A~*DB0$B9Lr>;}Xqpk=a?${o!=`{lm$&I*b!tunY-DsWODUvrW=xR= zFr*G%9k9_TKn*lD#i$v~46xd{Ggxck2EKJpN@Gv=8#AaHpeIJs5gK}0T2|?yz7G#z zD*|8*+_9W)XogmMR16>;*pVwjTMzEM89lS1p8AaByExO;`w$e%4bVCn2Nb*71lD@s z;IAwMjhYJU;M%gh4lpx-8WF%!kJjMhbBq`h9!qJ;LeL^C1|Oeqg$Yy*a6&B{Gn22a z@Aub%l^B6DK}LW{b`3r}zcd<9CQvni#~m;&-cCY2wDYYA)C)nq&ao~At<>Ueo0n7% zJkF#LB&m358^MznPb^6RT-j1GL8-@RUPUXkP*prnSN|wg|B?s*I|A;2rA~@Jhrh$3 z5Y*CvwVW0eMvb{F1@tOZT$ys`9H6H|YUEQXrRb~zT2~x()pP&Pf(KBl1HVska`=a+ z*8zHW*(@t(9&}hR5?M_PLDGBNx9ISIc_k2b^v+KAqGLB(wuE`<@V9mUNa;d70!VU^ z#Y(`74sWRJ2N;=A<5~L3L7-L{5*->^tdZ(Bn*(q&Z)?2h@Pf)5fUD~D>hM}Sg7A0u z&J(==1W}s=O3SDgrPf(3(ll}+s;dCW21ct6eWT^H`v7k+Sq6IQz!m%GJhf+*d^C(8 z+FBn2js1ERAT6h!)`>R^KHNt*9091jD1FU4BU`FY1h;K?OBlDgB3cpUCWcagw1{%z z;NKGZF)p7As5xra=WoL0DqwW^6?vJajY|VmdYd`9;}SWp4S=z_Z5$oVj;zjaL3TQPl-#dHoxiu zHJ_YwPQkVO*=<0um#6&j`FwWT;To7^t@-&$>90{S6Ub5gYthdS{Kc9&19={Nz?wom zKn*M_gDr}{%lVZ73RV<)GACry$N-lU0=S$Iz~xkHfIybf`e1c!76RBvZ!mMtq;O_L z5du)81g`|FHw#dK#-ivILkK{DTHss3qQvnw`bWf|E`Zf3Yz9eNs6gQBwK4#fWDj7aE!G3xvph^`aS;f+P9w&^ z?^w;OEwI|QE&?t&=k-&-O#j;|lz6-dL9_;V8*#M_5BMg{3OL{OX3I(RWU6g_0K9Xx z)6te}(PoPPYFn;59B;{%9jFW7ZNFX9@guf)D+IT;f-NnxEZL&T_Pqe;3jdcTkum-+70Bihqau`wWakOohKovz8GT3ah|t&-+;o7SHloD1RvHj(=`CMfpUUF zxxqi-UMTRrO=SS8D&`&w>@Xw%s>{SZW|f;#KV)bMsBN5Zjs>>Zz8BDfTC;0@{sv61 z0(#fsp4aPAm=-{Rsx3I@jb6)3*5K4NM+g8DBYPdDYk(ba-yQHm2!NpHjoZ@+0RV8& zZ^#BAfPdg8f(tMkcoaei0Dw12AYP}15CEbjf|Sl`Z*!C9Rbh#p1OpE|5Jds8(WFDc^?u}028kRB>r{m<*@&8WNZGrGb l$=4Lny2<#Pzu>2o(honG=APxIh>rjO002ovPDHLkV1md>o{Ing literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_5.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_5.png new file mode 100644 index 0000000000000000000000000000000000000000..1545c0ee718aba8d4aaf13e3185976c31cc550ce GIT binary patch literal 1126 zcmV-s1eyDZP)Q;kIbHxGa~ugX36(1>tHtO$VR}4Bk1s%=)zS zAiexrvP;s1>UwP&h4yS`^dUzXY4=fUtteBKtAKu>2o#-qP(ScCdiu(Y0EsxXj<=>q z&pjUDdiEOJQvm<2gB(M{_^RGlihqo^?6WD=Ic7D_69hlxo(3J_4Lbp`L>uc?O z;)V9$)16QCMy3SI2}}pD2$*yoA!bO=%u~=^olo_9qk-iFp(#LWjE~+ZF_Vm&8FzI) z#Rw-z5*Wl)D~TR>?LkZUB!L@(I*W@0@=6jZls>h(8cFn!Pb-%oJ&$IyX4`C|KLRvm zxJaO9uF>Q?SwL=}wxfq+qH`g#J!1Dvh%66jol*i3fM28UmYg<%BBRTr7m-ozQ`>{k zbUqD#22+wiA7&5#XR?IHaU=;`1!t#$Y0dAe5Sx!d)v^TGv3y|tcnLtSodKfCl z>!Rz#FNSUhBeExrY(%m=dc1W;j`-Q<{~ja>bl@otaE1sb30w$gh+ybQ7|OiS`>2f9 zm&!E~=aotLacUXJNtHypv@Kxdr4|9y1U#=nvFd;bWdbEq79n+B66whbM(b$P2hUxs26T?lwG5Pq zA8HKM(b|*lq3<5@7}1Nem@9UCDeu2m2%iVg$e6V%KyuP3wYFn>Y}4B8)ipb$jO$PN z?j&%v(Jw8*C7G==fva^shbJm`kwA2B)t9*{hLJ$&USe*zB7nt~wFr@z6YjkL&uLtG z-#XwiBc5cd1+)Uvur&!xqyv;ven-tpk-!62CU6%>nX=WfwF96O^KQ{#YX_j4fuY_?ZG$en<+hgReaAQ%rv-bmZyW=xE--38w$+Skz&&+WJJe|2R?`J)_G!zY><@ sEPaW0ysZMXkoT#wNSM|ReOV07*qoM6N<$f|)QBApigX literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_50.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_50.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff2a8874df65ef828d5d06387d42abd57357acf GIT binary patch literal 880 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 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_55.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_55.png new file mode 100644 index 0000000000000000000000000000000000000000..b8a8c651257dd42798c7d1ab1e1a46adaed2f06b GIT binary patch literal 1080 zcmV-81jqY{P)PbXFRCt{2ozaryAP7axR{#GmXC8Lla%fOcKoU7mJxN-L+$ci2 z=DP3uF3GX{*=<0wmrwn0UDr-KUQIj6MjPi(DSwU1mB5ZVz7fay)BX`norygkcp#cW z-vIVtMS0jV2t1sx8K4qHp-<)svuVx%hm!(0oD{&}qyP>l1#mdzE+FxRyJOJaouvRa zfjNBS-21-2zPBm}cLB`YxE0>EjGQ-`1+eQ^1>quqQ8lcd_Yy*{Ka0v8)#i-DN9Uzu zX(|A&G4;H)5IF5)4$`m(-lL>{3Q7eW0gkUCs z6$e_(0ABWBP8hYTT{DmfA$I|aw1d3E@jZL$-*7f_Nd!HiDh83-EO9;-y;}ku-}arE zKn0}E-vuTD7Xj?PaVe6Z?DSj z0;wWUT>`M1tQ~QZLDmDMVGEXgiRN4hssex!?rieKVnA1I=|$4qHlks&1aJmOyP~xM z#}+6axI{>cIvCU#Sc}Ir2H+N3-~hM3q|tzCOJWQBPVdR)+RaG;TPKZNGl5i9Oxxks zwv48A*fzXg;#BT7a~3xNjLNK@BAB&h#sS!lg1hX%zb!25eAL3CAlG*}4TS3|6(YMPskaI&`OTdgRy-3{>4FIGwe2xY;b^wC90YP|=G3v>%x3i3_X?y>=WGBMt{BvtI!DJMv69+t z+rW-Lfhhq{`E$;(H^NB{waWnZS<=3y$fg7^+CTS>MZxL`<^+}X7>5 zf0P_r8GLG1klYJq+bhb!Tza{74DNM3ET&sd5ojd5$G;G=0yiZ`q0 zyMKyD2ms<4TeMHF){@}WCx@ed8z@0#UmTHlm7xp#=KDo83YQ@iVq@@|2lSoC%*|)VgKXE y-X8hHbMS$Y)D$A|YZuUqdh^`c&)Ms)A{sw5PWhdLujB^+00001HC3!4=P8*P% z-qA2`FMez$*$vjR=Y~_jQhw|-6~L+&j#8`om5hu*yf&1t5I{8g;jx8fPcj!hmLs-MQNw zLF=CMc9=u}uCdy+cnw>qbG5c>9xBaRyCh?@s3(DK+Y!88Vf7yI)X^-HLC;M=6t~OG%v#TVkUqaoexm5>j=&RTd1Fp#GPjW z8(@!!{cBBev`&JvaQYD7nnEXm)C;|Bn~|asl~@trG~SMm@R*08VP7_cEbtEh-dq&{ zPP2QQe1hF0<`e*dotx_Y{NK;LJAMj)z-|W)hE>IoyH%wC7EsEmyW_P;1tIM!N&z5v zB!JQyhSa_kz=F0%z$3x)P9moQIGxQ#!&3yFWF24w5WzQ99$)oW(%*DZmSCraH}X#a zPesF#H;duXN#N*Ao#Q~PQz*J1@=wQhNbf^02I>*E1W5!U|KUh%b=>;dtdV8(Y|fbv wLvz7N#Pr`&0M^O#?Vn-)Mlzoz&>1A*FH6j9lh-Os$N&HU07*qoM6N<$f`lZ}Gynhq literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_57.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_57.png new file mode 100644 index 0000000000000000000000000000000000000000..f7c1e8023e5719b43bfed8b759b62ce5ccbf6eeb GIT binary patch literal 1132 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 Te-l@l00000NkvXXu0mjfz#eMP literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_6.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_6.png new file mode 100644 index 0000000000000000000000000000000000000000..f99662e70f0d928b252670eb51bed5fce26b3b38 GIT binary patch literal 1077 zcmV-51j_q~P)BRU~w0>|jmP0t812KyY*gfSa-Qoj++lO+)1@Wq7*Qj-@`z zPZ%u#4`j4GEh>Y!11e9^@}zyTRF~F6_4!y=+=ssnlK}KyoRr5G9xV<{=i1%sYMRa4 z(Z>2#Fs5g{_}`PbYONJTs&W@Fhne^2v4XP@w}FWH(w0B}i0mO?Vu zh%eCklI7Xa3TX?k%>xNX&jN5)G4r0f0-zByG(m}YY2Q&lyDYv%<24H)k!edmEqz8| zTrNP;bYu;rr_|<->>OFg(KZ?^ZAn7c+if8v2^<7+S$D!KRHJK`k-!0bd+}Qz9*x$v z%^J*+KxFb!K6+|(Ezv(I9Yq19zC2@>#zxCL<+i>p1YH5p{I|87B??%|&k0EBG!La| z(8g!kdq2JSwBPHx+;g;y(RCJJWw)AEOE1qu1}**a_IgigtIFGci?DiJf=39F1RAl@ zZpAtd%X%gWG+?F0FU8IaEagltz(br+eXXvA^xfG{R7mq5wg4yuj86VE(nX1lcI2x` zvgVt;BvERACGGd3X9aFO4n|~8(riSsEd5yP?7Co9c(#YM4o8we1#dI|9z5fcENPO! z4pv?KyWqMKh9Yk?9p&-*QocswtYxC%4maSk0O;5k<)for>SFkydjwD`ce;k&1xZ+j zBY|k~EfGHyokIh)MEj&R5_TjB6tK(oZ38JC?T(>1fJVl8y8={B($d~>?9AA-HX}w6DUt*dASqk9V){9TPXiNYBLyHh zQUC&B=q%t=th`I{V&-6L_%JAO2EtkZ8Ul_4uFzoxpp;^Yl${ROS-=TEmrEjBgU}X$ z3qce?pb8LD0D4#3BDn?eFen21=XU{6-s$flqy?bR?l+vi_@(@{0Mz6~F?|%=_eWUx zhJP*~(xef%5}f`%+I)|=6ndBWjzs<%j`-KHXt8&m&yz6!<4DaczLBSmwdF}aQ}6W` vNqBzj0yGo2N}lHyuN3jq%0^oJT5I_YO3H`L3Qxit00000NkvXXu0mjfA%pE! literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_60.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_60.png new file mode 100644 index 0000000000000000000000000000000000000000..950152b73796097626af76c287ef2e7fa8e703d6 GIT binary patch literal 1269 zcmV6M#0t&CP4-AjF=b`o(k zS%B)(R?vHzhstnn!P}zX&#iPK4pRXl0SxcTmfDv3LUm^hs;r2!lu}TnDp%Ka(7Ckc z*Q?CE3ylvz%TIhk zIt^?QxRoE>!d(`Crx6=(u?{=I``!@+krX1L2uT750IhgUm=U3Sfcli=nIy0?_yY0> zzPB|*V~`fMdke5kI3j!KIc@iCR))`&guAvuNfGG0yCQ)!ipLv`MDcit_)Uli|L!n0 z7d-7d6bgMWVse)(B)IFbEIp_bwh!2zYeR$VCFBtF$#Ba%a_Bi5yz1niFIc6r%wlPg|ob zvgMkM1?H*&sjTBd)bH4dK!@?&0J zCPEr%o3w2yU#o}e^Ra5}Yu*9R)80k$RC)@rCx>x=4`7iR>A4gFFXqJnKzhGC?2XA&6kQZ#6Bep&_*LGL_|Ab`h_k-#pH_yRA(-RFAmX}_Yk3wtRN z*pry?I-?nOs}JsJ*Rw@v$|8+(1l+$4)}HgI9U@*@8ufF>7KGl-W6nL0Vgr%)LSyT# z5TQ7LWV-m?rd_2rM{BwlBg`#dD3+&VEx4Z8mIQhguU9Z8BEVLz(1MHv8bHkbN;`M< z=|MOW_$Ea5WG`v!iQWMugl*lx)?myXLg9Um#I_1h(IU`Z)?fyn75XapZJ=iW(ft;Y zF8!B>b1FymmaLOL#%f?6~k z#VYf+JqeWX1mk}KXZcpuH@~R1ziVM?TDRW64L@7J8(%I0?frXg3o~N-Eg%{Vd?F$^ z60iQ(vC)<4nS+Siw*uV%I8yVGXU*dRZT+^9*F#pL<5z8r0GsbC~YBR-Bbk>A%8}k zUbWU*l4JSz>kcHpKd_pF zMgS?+D$15Y;NiSjfW|5kx-&ai)3gAGlLBx!CIO(PtZma@ZtAo;T79%FT^pSz@gv3n z8ts|3LAPlcs>7d!`MD^(F0Z$9oH8oBv+ubp05pNoyExM9)&{lb=a#O8+FJXxGTy#R zR_~oLxN5BxWvX@_*j1ooi7c7d3ZOaR=kU(kkPAqBaHX;+84`}3_Hzqi5eBmh(6;G* zuYS)hM8Tr*ngu}a(t4eC+#+aQ0nmJ{Cq6g{N#jS((XgCL5;|>ux{rYtsYQ`JZ-cZy zBHZuKx=%Wh7G>iTFZCmXz==pf-zV@~Lz~yk1Ww|cli#jqRZ`6om|OtQ?9t=BY#l!? z?eEODC!b!|;}Vb%m@ELw;-PFGYD4#tAnnetCZAs4Y7LMOxLkne2DPjps<*RntgzH; zR0uK%d;>maD`4$UtCvCG;YkFvYKB8X~7&lj>;_Uq6CM#(G>t~ zX_hq$XlZ9TZ!#Zq5ZKG&p@0yTY4vtsb^q@rgFq*{2!OSZ83YE!8VI^Ffo&iC@@;gi z7fAN%X!X&y7HqDr!Qa9a1U4k;vX~t$AoOMqH7Q50qqTht5rxKN0kn1PS~k$*FRhv_ z^-H=IYU}mk)M7-7jWP&S(8gj1YhV%d{4hj7dqj<-9K*}PQ4rYnwZP9>hacC@V`-1d zC8#yrLDRj^b%gG>fzpQ{J##toN|~2y?NEF4O4=HvMx6Lkp1)Uctq0HsL@MJGk0ys6 z=h`iq;L)J--EwpvJHhX*)_fiOL^SP}EFvW{fe)fhK1aH@w=#h<12f(x>O`!@P$rNc z*RpojwSqG;b%`JMhao61`UqF2&4s2 zpq3z#)>H0M)1rn{!)kwh<0N$iRSky=>m*IRgnDa*uydZair$|PAQA1Bu_3t hyU8qzH~FQM@(1XRBm-|Kx+MSr002ovPDHLkV1hx8*|-1z literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_7.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_7.png new file mode 100644 index 0000000000000000000000000000000000000000..cf09a7842a0a864332ebd0f10693e05fe46a883e GIT binary patch literal 988 zcmV<210(#2P)DC>(*OwvWB(yk zd-dLXE7J1ybOnlMImW^3^?I@%p@B|zwSGQY`>9k#g6kOlyJ9~d@XKn}SzOP7PpoF4 z5uhg4DwC~5U~>L>fWayjx-&a?)A9hxDFa9j8v+Kyjg63iA7|hr4$M!b;quhu5k8K< zXbqU(@FNYp)TdVCz~Pijv*Pjq1&?LMOM{FDkIT!2$=>_al%m`sXYy<1qxBAJ$95>;b5YTHF-;E(t!57_{6MUr+nw9#t*%xKhO8fwkoK z7(t1^N$wbYjOSj~v8!`0)PLkYF)_ zX%9dx0aMSYlIVig%r!_8q0)eOMWU4z7Ou`R0+Rt~4W?!sRK?Wn#MiV4FX~#7s5~2w zP`!g0Bfyjhbg-HMv}X54+}M@~G_vC0d*Hl)$pARf2GhATT%JppM4UBGMm%c-u*|^a z0jSr$R66x)7tSDDVNC!^`RJs7i93&Uu%s+1dR|ln6Ai zL;Rl=gCzo!fy01nC6E(k9#Ll%k(O0KZ<(jU$I6&q2g747L}+47O4CH4RXlp`>s>^N zYAh}hh|gg@*@#Qo!eoiSc%jYj?+XS zcWy_ZAxCKwhsgurcmCR1KR(`tG4NxbLiE9J&G^$We9UdMxM~B&9biL;?A8_!^}~?1 zm(rhsGVIaj^iKg91|NntOlkx8birwLxNUck)CN!_Hh?UyALD)-Sj46bAUS0K330s( zh)$$Mo|zrO=?x$|=?ws`{b!=~0|2Czvgo8W0BWCMMsJYT03g^1vKT_|J+}d9yPPwG zh13Snn!d{^x)G!|fYxkA5EXVqNaRLy;Mkv`56S}|tiN!I!qM7$oXgPY;*Z}Dkip$~ z$uJoz1SF^ab!>9X|2R_GJ{2`B!=!i%0n(yJwzOUM3sS$*lK2KMvcx%HG}t5n0000< KMNUMnLSTaZZ_|kY literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_8.png b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/frame_8.png new file mode 100644 index 0000000000000000000000000000000000000000..d12fa6abaeb935d184c0a5f82713bebc827f1ef0 GIT binary patch literal 1201 zcmV;i1Wx;jP)0c@!;u7dIFbMlM-t%SNCGUtbzSAUF7-2NgX|eQ)DMFsz#_a} zFZDCJFN3Gqcy`FfLK0vDYLME1UDx#!u=?3*XU%erKrCM6kV26606pwZ__&P#){>WG z*oUoKKou}rfZKasfKea4ejt&h-9vs@;taJ%{d?mxezVv@fT(ko1Pl>+Ap7dezh5E2{L4>^~3sPi9ab6k!=LaG{DFbEx|rq zYJ)hI5MXBTDa_e?5(-{4O?^o zi5c0Z=K)S!2~Y(vA~@xJ?|9j|Zef@JUeMUUMypv-1$-w-+Gn$}1?#<(_Y$$yCyQYb z7@gH#36`mmd*fREBz|Md7Eod3yB?8B$z$Rb7!rYz+0W$M@^ib)u`}MQvT66wGikOF zF{X(;G(IC1EnDYiW}M|duj>j_!o&j?YcLH?AKe_Mzp}TG*Hgw z_Qf2{%6m60{SpPg<&^?qAdgC&_S{M?6>=wZOfWd3u+A!iW;iFpwjuu#E zq%ax~F=Q&0_>WtE7Jf=FECD7zYu7wmOE|6=CxWl}zX0?FFkg&SWs?~SvbR<CrK?Ynni`d_gu^prt6bW;+_E2i+o&nN=%9;3!Vnc22>vN?^-m zln${uaugY49?MpMp8<#*pII%Kej~p1kfbFt$}X5TT06Ond-aT2+F;oVU2)Q_iP>v6Ee?%<0D2(Ke%!=h>i&9$VGZY^>`nZe0OZ!V{XT zkn)ankplPr*7`>6wXCUL9~FcjO@N+M&`QPHHl9ec#+CL`@oPS!F(WBo&$f1}2xNgC zs!R3ezW)oytpF=>ey^`5lj1l6oRAit0=CL1w}=QHmjy_iKKs36<53a#SOU~4v6Ci`U9^outr}&$F_Mdo1 zhyZs5BZ;sMGyzTszzIHl8>l*fc4~DuyfcH;4;+pbffi06;WxnD0zUPN{#3tr!z4g{ ziQkXV7Qp_5sp4(|c<-TwBS}G&eN9sv-5F`PDa9tOB zEj_2s|G?;nTNYpt9%%Q*s}xXLDpAZq|U>`vHti~w55OERp( z(j}k@7|y}%Gt0q}joyApB8z(_^+OY9QhCX~)jra16iW!;?OY`RLWCYryVm#iz7)AQ z(Wi+tZQZ8Y0O^O;Zw;XY7@4V&(Ll1x%~(y4Np(3pXrDCkM}?wP*Ml$(FcP9E(7~lP z@FRo(Go4@IVR#Y&$Mhv2!ui!Mq6@rzK!jWUlmw!c)uZ<{J5m`>Up<&gfGFp;_7Pox z_NBE|BMi5;*5~afg`_F0dTra1O-^`neeJblRmeOm$myEh6!Lf4Rx$Ho8?u&Pm-h^o3>lfK1=yb5oCw_y&Q@m7|NdnS#EtLqVC zoXC^fN5rC5R~nCnCA)wgf#-F+mT{BT$(~$-bo?ucKJLEN2DNKNwh=9`{GC8_3#jP; zZJ?Z(q)UkQDP{7|{#kvIo=ICmt6ik88iqt5x&(0IO%sEN5Jbdf!bZ0U^s zh@lbhWIXm-_)d<{1Q@;M?pbv;;TX}52Ve7l0n!hE{4iRUjqXsS`dUQeb~TddqwUb8 zbav!?9RYfo?rnp+#|cEOFH#-O(bbkD4v}_x&@BRyS*3|OE)R}~z)|e9^z4AJOknF& z&-Q8t(#bf&BEU}rM()3s@y>oL7cf#^vrE@uy1PKiaOG$ixAGaYv_V(|(1epFmeBH} z5yZPKM6!v95Tx}q=TrM!8>7)KLi#qY)qyme53n zly#&lDRApMXIm;Se(TtHR0JMNfSP685z;n~ zmYH#a`U(*^3%fe}No=P9W+R=h%lZ${4q*;)i@KuBnn$+v<44Y0#( zkHqQvLM6aSKg>6bHT;br^cALxxBaLmE(sz5yw1~Jw0MFD+PnFQ|6rGZSwC9)PakiY cS*H=^9}&0!q9c2@qyPW_07*qoM6N<$g2|^eT>t<8 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L2_Coding_in_the_shell_128x64/meta.txt b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/meta.txt new file mode 100644 index 000000000..0378846c4 --- /dev/null +++ b/assets/dolphin/external/L2_Coding_in_the_shell_128x64/meta.txt @@ -0,0 +1,23 @@ +Filetype: Flipper Animation +Version: 1 + +Width: 128 +Height: 64 +Passive frames: 21 +Active frames: 44 +Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 17 19 20 21 22 23 24 24 25 26 27 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 +Active cycles: 1 +Frame rate: 2 +Duration: 3600 +Active cooldown: 7 + +Bubble slots: 1 + +Slot: 0 +X: 7 +Y: 46 +Text: GOOD JOB! +AlignH: Center +AlignV: Top +StartFrame: 54 +EndFrame: 57 \ No newline at end of file diff --git a/assets/dolphin/external/manifest.txt b/assets/dolphin/external/manifest.txt index 4d4445030..1d3f35106 100644 --- a/assets/dolphin/external/manifest.txt +++ b/assets/dolphin/external/manifest.txt @@ -168,3 +168,10 @@ Max butthurt: 13 Min level: 1 Max level: 3 Weight: 4 + +Name: L2_Coding_in_the_shell_128x64 +Min butthurt: 0 +Max butthurt: 12 +Min level: 2 +Max level: 3 +Weight: 4