From 9face9d50d479a7c8b1640c3f4e4947415a13b96 Mon Sep 17 00:00:00 2001 From: Husamettin ARABACI Date: Fri, 26 Sep 2025 04:24:41 +0300 Subject: [PATCH 1/4] Added multi task system on firmware --- firmware/Cargo.lock | 1366 +++++++++++++++++++++++++----- firmware/Cargo.toml | 73 +- firmware/Makefile | 2 +- firmware/crates/at/Cargo.toml | 22 + firmware/crates/at/src/lib.rs | 3 + firmware/crates/core/Cargo.toml | 22 + firmware/crates/core/src/lib.rs | 3 + firmware/crates/dds/Cargo.toml | 24 + firmware/crates/dds/src/lib.rs | 3 + firmware/crates/fsm/Cargo.toml | 22 + firmware/crates/fsm/src/lib.rs | 3 + firmware/crates/main/Cargo.toml | 42 + firmware/crates/main/src/main.rs | 43 + firmware/crates/nvc/Cargo.toml | 22 + firmware/crates/nvc/src/lib.rs | 3 + firmware/crates/rgb/Cargo.toml | 22 + firmware/crates/rgb/src/lib.rs | 3 + firmware/crates/usb/Cargo.toml | 28 + firmware/crates/usb/src/lib.rs | 118 +++ firmware/memory.x | 2 +- firmware/src/main.rs | 132 --- 21 files changed, 1618 insertions(+), 340 deletions(-) create mode 100644 firmware/crates/at/Cargo.toml create mode 100644 firmware/crates/at/src/lib.rs create mode 100644 firmware/crates/core/Cargo.toml create mode 100644 firmware/crates/core/src/lib.rs create mode 100644 firmware/crates/dds/Cargo.toml create mode 100644 firmware/crates/dds/src/lib.rs create mode 100644 firmware/crates/fsm/Cargo.toml create mode 100644 firmware/crates/fsm/src/lib.rs create mode 100644 firmware/crates/main/Cargo.toml create mode 100644 firmware/crates/main/src/main.rs create mode 100644 firmware/crates/nvc/Cargo.toml create mode 100644 firmware/crates/nvc/src/lib.rs create mode 100644 firmware/crates/rgb/Cargo.toml create mode 100644 firmware/crates/rgb/src/lib.rs create mode 100644 firmware/crates/usb/Cargo.toml create mode 100644 firmware/crates/usb/src/lib.rs delete mode 100644 firmware/src/main.rs diff --git a/firmware/Cargo.lock b/firmware/Cargo.lock index b782377..3a3d4c5 100644 --- a/firmware/Cargo.lock +++ b/firmware/Cargo.lock @@ -2,12 +2,67 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "ascii-canvas" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1e3e699d84ab1b0911a1010c5c106aa34ae89aeac103be5ce0c3859db1e891" +dependencies = [ + "term", +] + +[[package]] +name = "at" +version = "0.1.0" + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "az" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" + [[package]] name = "bare-metal" version = "0.2.5" @@ -17,6 +72,21 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bitfield" version = "0.13.2" @@ -35,12 +105,53 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bytemuck" +version = "1.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" + [[package]] name = "byteorder" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "cfg-if" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "core" +version = "0.1.0" + [[package]] name = "cortex-m" version = "0.7.7" @@ -49,7 +160,6 @@ checksum = "8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9" dependencies = [ "bare-metal", "bitfield 0.13.2", - "critical-section", "embedded-hal 0.2.7", "volatile-register", ] @@ -74,6 +184,15 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + [[package]] name = "crc-any" version = "2.5.0" @@ -89,6 +208,61 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.106", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "dds" +version = "0.1.0" + [[package]] name = "debug-helper" version = "0.3.13" @@ -101,7 +275,7 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "548d977b6da32fa1d1fda2876453da1e7df63ad0304c8b3dae4dbe7b96f39b78" dependencies = [ - "bitflags", + "bitflags 1.3.2", "defmt-macros", ] @@ -138,237 +312,724 @@ dependencies = [ ] [[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "embedded-dma" -version = "0.2.0" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "994f7e5b5cb23521c22304927195f236813053eb9c065dd2226a32ba64695446" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "stable_deref_trait", + "block-buffer", + "crypto-common", ] [[package]] -name = "embedded-hal" -version = "0.2.7" +name = "document-features" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" dependencies = [ - "nb 0.1.3", - "void", + "litrs", ] [[package]] -name = "embedded-hal" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" - -[[package]] -name = "embedded-hal-async" -version = "1.0.0" +name = "either" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4c685bbef7fe13c3c6dd4da26841ed3980ef33e841cddfa15ce8a8fb3f1884" -dependencies = [ - "embedded-hal 1.0.0", -] +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] -name = "embedded-hal-nb" -version = "1.0.0" +name = "embassy-embedded-hal" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605" +checksum = "554e3e840696f54b4c9afcf28a0f24da431c927f4151040020416e7393d6d0d8" dependencies = [ + "embassy-futures", + "embassy-hal-internal", + "embassy-sync", + "embedded-hal 0.2.7", "embedded-hal 1.0.0", + "embedded-hal-async", + "embedded-storage", + "embedded-storage-async", "nb 1.1.0", ] [[package]] -name = "embedded-io" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" - -[[package]] -name = "frunk" -version = "0.4.4" +name = "embassy-executor" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28aef0f9aa070bce60767c12ba9cb41efeaf1a2bc6427f87b7d83f11239a16d7" +checksum = "06070468370195e0e86f241c8e5004356d696590a678d47d6676795b2e439c6b" dependencies = [ - "frunk_core", - "frunk_derives", + "cortex-m", + "critical-section", + "document-features", + "embassy-executor-macros", + "embassy-executor-timer-queue", ] [[package]] -name = "frunk_core" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "476eeaa382e3462b84da5d6ba3da97b5786823c2d0d3a0d04ef088d073da225c" - -[[package]] -name = "frunk_derives" -version = "0.4.4" +name = "embassy-executor-macros" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b4095fc99e1d858e5b8c7125d2638372ec85aa0fe6c807105cf10b0265ca6c" +checksum = "dfdddc3a04226828316bf31393b6903ee162238576b1584ee2669af215d55472" dependencies = [ - "frunk_proc_macro_helpers", + "darling", + "proc-macro2", "quote", "syn 2.0.106", ] [[package]] -name = "frunk_proc_macro_helpers" -version = "0.1.4" +name = "embassy-executor-timer-queue" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1952b802269f2db12ab7c0bd328d0ae8feaabf19f352a7b0af7bb0c5693abfce" -dependencies = [ - "frunk_core", - "proc-macro2", - "quote", - "syn 2.0.106", -] +checksum = "2fc328bf943af66b80b98755db9106bf7e7471b0cf47dc8559cd9a6be504cc9c" + +[[package]] +name = "embassy-futures" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01" [[package]] -name = "fugit" -version = "0.3.7" +name = "embassy-hal-internal" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17186ad64927d5ac8f02c1e77ccefa08ccd9eaa314d5a4772278aa204a22f7e7" +checksum = "95285007a91b619dc9f26ea8f55452aa6c60f7115a4edc05085cd2bd3127cd7a" dependencies = [ - "gcd", + "cortex-m", + "critical-section", + "num-traits", ] [[package]] -name = "gcd" -version = "2.3.0" +name = "embassy-net-driver" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" +checksum = "524eb3c489760508f71360112bca70f6e53173e6fe48fc5f0efd0f5ab217751d" [[package]] -name = "hash32" -version = "0.3.1" +name = "embassy-net-driver-channel" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +checksum = "b7b2739fbcf6cd206ae08779c7d709087b16577d255f2ea4a45bc4bbbf305b3f" dependencies = [ - "byteorder", + "embassy-futures", + "embassy-net-driver", + "embassy-sync", ] [[package]] -name = "heapless" +name = "embassy-rp" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" -dependencies = [ - "hash32", - "stable_deref_trait", -] - -[[package]] -name = "hexagenmini" -version = "0.1.0" +checksum = "1a284935af0a869de3fa14af74b5f932389dd66d7048012f1083b06f38d05399" dependencies = [ + "atomic-polyfill", + "cfg-if", "cortex-m", "cortex-m-rt", - "defmt", - "defmt-rtt", + "critical-section", + "document-features", + "embassy-embedded-hal", + "embassy-futures", + "embassy-hal-internal", + "embassy-sync", + "embassy-time", + "embassy-time-driver", + "embassy-time-queue-utils", + "embassy-usb-driver", + "embedded-hal 0.2.7", "embedded-hal 1.0.0", - "itoa", - "panic-probe", + "embedded-hal-async", + "embedded-hal-nb", + "embedded-io", + "embedded-io-async", + "embedded-storage", + "embedded-storage-async", + "fixed", + "nb 1.1.0", + "pio", + "rand_core 0.6.4", + "rand_core 0.9.3", + "rp-pac", "rp2040-boot2", - "rp2040-hal", - "usb-device", - "usbd-serial", + "sha2-const-stable", + "smart-leds", ] [[package]] -name = "itertools" -version = "0.10.5" +name = "embassy-sync" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "73974a3edbd0bd286759b3d483540f0ebef705919a5f56f4fc7709066f71689b" dependencies = [ - "either", + "cfg-if", + "critical-section", + "embedded-io-async", + "futures-core", + "futures-sink", + "heapless", ] [[package]] -name = "itoa" -version = "1.0.15" +name = "embassy-time" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "f4fa65b9284d974dad7a23bb72835c4ec85c0b540d86af7fc4098c88cff51d65" +dependencies = [ + "cfg-if", + "critical-section", + "document-features", + "embassy-time-driver", + "embedded-hal 0.2.7", + "embedded-hal 1.0.0", + "embedded-hal-async", + "futures-core", +] [[package]] -name = "nb" -version = "0.1.3" +name = "embassy-time-driver" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" +checksum = "a0a244c7dc22c8d0289379c8d8830cae06bb93d8f990194d0de5efb3b5ae7ba6" dependencies = [ - "nb 1.1.0", + "document-features", ] [[package]] -name = "nb" -version = "1.1.0" +name = "embassy-time-queue-utils" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" +checksum = "80e2ee86063bd028a420a5fb5898c18c87a8898026da1d4c852af2c443d0a454" +dependencies = [ + "embassy-executor-timer-queue", + "heapless", +] [[package]] -name = "num_enum" -version = "0.5.11" +name = "embassy-usb" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "dc4462e48b19a4f401a11901bdd981aab80c6a826608016a0bdc73cbbab31954" dependencies = [ - "num_enum_derive", + "embassy-futures", + "embassy-net-driver-channel", + "embassy-sync", + "embassy-usb-driver", + "embedded-io-async", + "heapless", + "ssmarshal", + "usbd-hid", ] [[package]] -name = "num_enum_derive" -version = "0.5.11" +name = "embassy-usb-driver" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "17119855ccc2d1f7470a39756b12068454ae27a3eabb037d940b5c03d9c77b7a" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "embedded-io-async", ] [[package]] -name = "panic-probe" -version = "1.0.0" +name = "embedded-hal" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd402d00b0fb94c5aee000029204a46884b1262e0c443f166d86d2c0747e1a1a" +checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" dependencies = [ - "cortex-m", - "defmt", + "nb 0.1.3", + "void", ] [[package]] -name = "paste" -version = "1.0.15" +name = "embedded-hal" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" [[package]] -name = "pio" -version = "0.2.1" +name = "embedded-hal-async" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76e09694b50f89f302ed531c1f2a7569f0be5867aee4ab4f8f729bbeec0078e3" +checksum = "0c4c685bbef7fe13c3c6dd4da26841ed3980ef33e841cddfa15ce8a8fb3f1884" dependencies = [ - "arrayvec", - "num_enum", - "paste", + "embedded-hal 1.0.0", ] [[package]] -name = "portable-atomic" -version = "1.11.1" +name = "embedded-hal-nb" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605" +dependencies = [ + "embedded-hal 1.0.0", + "nb 1.1.0", +] [[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "embedded-io-async" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f" +dependencies = [ + "embedded-io", +] + +[[package]] +name = "embedded-storage" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21dea9854beb860f3062d10228ce9b976da520a73474aed3171ec276bc0c032" + +[[package]] +name = "embedded-storage-async" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1763775e2323b7d5f0aa6090657f5e21cfa02ede71f5dc40eead06d64dcd15cc" +dependencies = [ + "embedded-storage", +] + +[[package]] +name = "ena" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +dependencies = [ + "log", +] + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "fixed" +version = "1.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707070ccf8c4173548210893a0186e29c266901b71ed20cd9e2ca0193dfe95c3" +dependencies = [ + "az", + "bytemuck", + "half", + "typenum", +] + +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "fsm" +version = "0.1.0" + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "half" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "stable_deref_trait", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +dependencies = [ + "equivalent", + "hashbrown 0.16.0", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lalrpop" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba4ebbd48ce411c1d10fb35185f5a51a7bfa3d8b24b4e330d30c9e3a34129501" +dependencies = [ + "ascii-canvas", + "bit-set", + "ena", + "itertools", + "lalrpop-util", + "petgraph", + "pico-args", + "regex", + "regex-syntax", + "sha3", + "string_cache", + "term", + "unicode-xid", + "walkdir", +] + +[[package]] +name = "lalrpop-util" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5baa5e9ff84f1aefd264e6869907646538a52147a755d494517a8007fb48733" +dependencies = [ + "regex-automata", + "rustversion", +] + +[[package]] +name = "libc" +version = "0.2.176" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" + +[[package]] +name = "litrs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + +[[package]] +name = "lock_api" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "main" +version = "0.1.0" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "defmt", + "defmt-rtt", + "embassy-executor", + "embassy-rp", + "embassy-sync", + "embassy-time", + "embassy-usb", + "embedded-hal 1.0.0", + "itoa", + "panic-probe", + "portable-atomic", + "rp2040-boot2", + "static_cell", + "usb", +] + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "nb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" +dependencies = [ + "nb 1.1.0", +] + +[[package]] +name = "nb" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "nvc" +version = "0.1.0" + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "panic-probe" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd402d00b0fb94c5aee000029204a46884b1262e0c443f166d86d2c0747e1a1a" +dependencies = [ + "cortex-m", + "defmt", +] + +[[package]] +name = "parking_lot" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "petgraph" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + +[[package]] +name = "pio" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0ba4153cee9585abc451271aa437d9e8defdea8b468d48ba6b8f098cbe03d7f" +dependencies = [ + "pio-core", + "pio-proc", +] + +[[package]] +name = "pio-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61d90fddc3d67f21bbf93683bc461b05d6a29c708caf3ffb79947d7ff7095406" +dependencies = [ + "arrayvec", + "num_enum", + "paste", +] + +[[package]] +name = "pio-parser" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "825266c1eaddf54f636d06eefa4bf3c99d774c14ec46a4a6c6e5128a0f10d205" +dependencies = [ + "lalrpop", + "lalrpop-util", + "pio-core", +] + +[[package]] +name = "pio-proc" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed4a76571f5fe51af43cc80ac870fe0c79cc0cdd686b9002a6c4c84bfdd0176b" +dependencies = [ + "codespan-reporting", + "lalrpop-util", + "pio-core", + "pio-parser", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +dependencies = [ + "critical-section", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ @@ -413,82 +1074,79 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] -name = "rp-binary-info" -version = "0.1.1" +name = "rand_core" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ed2051a0bf2c726df01cfce378ed8a367be2a6e402fc183857f429a346d429" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" [[package]] -name = "rp-hal-common" -version = "0.1.0" +name = "redox_syscall" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8288358786b1458fb2caac8c4b40fb529ef4200d6c46467e2695b7a8ba573ae8" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "fugit", + "bitflags 2.9.4", ] [[package]] -name = "rp2040-boot2" -version = "0.3.0" +name = "regex" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c92f344f63f950ee36cf4080050e4dce850839b9175da38f9d2ffb69b4dbb21" +checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ - "crc-any", + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", ] [[package]] -name = "rp2040-hal" -version = "0.11.0" +name = "regex-automata" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb79a4590775204387f334672e6f79c0d734d0a159da23d60677b3c10fa1245" +checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ - "bitfield 0.14.0", - "cortex-m", - "critical-section", - "embedded-dma", - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", - "embedded-hal-async", - "embedded-hal-nb", - "embedded-io", - "frunk", - "fugit", - "itertools", - "nb 1.1.0", - "paste", - "pio", - "rand_core", - "rp-binary-info", - "rp-hal-common", - "rp2040-hal-macros", - "rp2040-pac", - "usb-device", - "vcell", - "void", + "aho-corasick", + "memchr", + "regex-syntax", ] [[package]] -name = "rp2040-hal-macros" +name = "regex-syntax" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" + +[[package]] +name = "rgb" version = "0.1.0" + +[[package]] +name = "rgb" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86479063e497efe1ae81995ef9071f54fd1c7427e04d6c5b84cde545ff672a5e" +checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" dependencies = [ - "cortex-m-rt", - "proc-macro2", - "quote", - "syn 1.0.109", + "bytemuck", ] [[package]] -name = "rp2040-pac" -version = "0.6.0" +name = "rp-pac" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cbcd3f7a0ca7bbe61dc4eb7e202842bee4e27b769a7bf3a4a72fa399d6e404" +checksum = "8af65855c40b2c35079514c5489abffc0429347fef25d8467ff98ad84b4322d3" dependencies = [ "cortex-m", "cortex-m-rt", - "critical-section", - "vcell", +] + +[[package]] +name = "rp2040-boot2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c92f344f63f950ee36cf4080050e4dce850839b9175da38f9d2ffb69b4dbb21" +dependencies = [ + "crc-any", ] [[package]] @@ -500,6 +1158,27 @@ dependencies = [ "semver", ] +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "semver" version = "0.9.0" @@ -515,12 +1194,124 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +[[package]] +name = "serde" +version = "1.0.227" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80ece43fc6fbed4eb5392ab50c07334d3e577cbf40997ee896fe7af40bba4245" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.227" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a576275b607a2c86ea29e410193df32bc680303c82f31e275bbfcafe8b33be5" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.227" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51e694923b8824cf0e9b382adf0f60d4e05f348f357b38833a3fa5ed7c2ede04" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "sha2-const-stable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f179d4e11094a893b82fff208f74d448a7512f99f5a0acbd5c679b705f83ed9" + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "smart-leds" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66df34e571fa9993fa6f99131a374d58ca3d694b75f9baac93458fe0d6057bf0" +dependencies = [ + "smart-leds-trait", +] + +[[package]] +name = "smart-leds-trait" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edeb89c73244414bb0568611690dd095b2358b3fda5bae65ad784806cca00157" +dependencies = [ + "rgb 0.8.52", +] + +[[package]] +name = "ssmarshal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3e6ad23b128192ed337dfa4f1b8099ced0c2bf30d61e551b65fda5916dbb850" +dependencies = [ + "encode_unicode", + "serde", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +[[package]] +name = "static_cell" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0530892bb4fa575ee0da4b86f86c667132a94b74bb72160f58ee5a4afec74c23" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "syn" version = "1.0.109" @@ -543,6 +1334,24 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "term" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2111ef44dae28680ae9752bb89409e7310ca33a8c621ebe7b106cf5c928b3ac0" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + [[package]] name = "thiserror" version = "2.0.16" @@ -563,11 +1372,41 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "usb" +version = "0.1.0" +dependencies = [ + "defmt", + "embassy-executor", + "embassy-rp", + "embassy-time", + "embassy-usb", + "static_cell", +] [[package]] name = "usb-device" @@ -580,15 +1419,40 @@ dependencies = [ ] [[package]] -name = "usbd-serial" -version = "0.2.2" +name = "usbd-hid" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065e4eaf93db81d5adac82d9cef8f8da314cb640fa7f89534b972383f1cf80fc" +checksum = "e6f291ab53d428685cc780f08a2eb9d5d6ff58622db2b36e239a4f715f1e184c" dependencies = [ - "embedded-hal 0.2.7", - "embedded-io", - "nb 1.1.0", + "serde", + "ssmarshal", "usb-device", + "usbd-hid-macros", +] + +[[package]] +name = "usbd-hid-descriptors" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee54712c5d778d2fb2da43b1ce5a7b5060886ef7b09891baeb4bf36910a3ed" +dependencies = [ + "bitfield 0.14.0", +] + +[[package]] +name = "usbd-hid-macros" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb573c76e7884035ac5e1ab4a81234c187a82b6100140af0ab45757650ccda38" +dependencies = [ + "byteorder", + "hashbrown 0.13.2", + "log", + "proc-macro2", + "quote", + "serde", + "syn 1.0.109", + "usbd-hid-descriptors", ] [[package]] @@ -597,6 +1461,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + [[package]] name = "void" version = "1.0.2" @@ -611,3 +1481,121 @@ checksum = "de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc" dependencies = [ "vcell", ] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "windows-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + +[[package]] +name = "windows-sys" +version = "0.61.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] diff --git a/firmware/Cargo.toml b/firmware/Cargo.toml index 3b011b5..cc2a52d 100644 --- a/firmware/Cargo.toml +++ b/firmware/Cargo.toml @@ -1,30 +1,69 @@ -[package] -name = "hexagenmini" +# SPDX-FileCopyrightText: 2025 hexaTune LLC +# SPDX-License-Identifier: MIT + +[workspace] +members = [ + "crates/at", + "crates/dds", + "crates/fsm", + "crates/rgb", + "crates/usb", + "crates/nvc", + "crates/core", + "crates/main", +] +resolver = "2" + +[workspace.package] version = "0.1.0" +authors = ["Husamettin ARABACI "] edition = "2024" +license = "MIT" +license-file = "LICENSE" +repository = "https://github.com/hTuneSys/hexaGenMini" +description = "Modular firmware with event-driven architecture for hexaGenMini." +homepage = "https://hexatune.com" +keywords = ["rust", "firmware", "event-driven", "embedded", "hexaGenMini"] +categories = ["embedded", "development-tools", "hardware-support"] +rust-version = "1.86.0" -[[bin]] -name = "hexagenmini" -path = "src/main.rs" -test = false -bench = false - -[dependencies] -rp2040-hal = { version = "0.11", features = ["rt"] } +[workspace.dependencies] +# Embedded/board embedded-hal = "1" - -cortex-m = { version = "0.7", features = ["critical-section-single-core"] } +cortex-m = { version = "0.7" } cortex-m-rt = "0.7" - +rp2040-boot2 = "0.3" +itoa = "1" defmt = "1.0.1" defmt-rtt = "1.0.0" panic-probe = { version = "1.0", features = ["print-defmt"] } -rp2040-boot2 = "0.3" +# Embassy multitasking +embassy-executor = { version = "0.9", features = [ + "arch-cortex-m", + "executor-thread", +] } +embassy-usb = "0.5" +embassy-time = "0.5" +embassy-rp = { version = "0.8", features = [ + "rp2040", + "time-driver", + "critical-section-impl", +] } +embassy-sync = "0.7" -usb-device = "0.3" -usbd-serial = "0.2.2" -itoa = "1" +static_cell = "2" +portable-atomic = { version = "1.11", features = ["critical-section"] } + +# Internal dependencies +at = { path = "crates/at" } +dds = { path = "crates/dds" } +fsm = { path = "crates/fsm" } +rgb = { path = "crates/rgb" } +usb = { path = "crates/usb" } +nvc = { path = "crates/nvc" } +core = { path = "crates/core" } +main = { path = "crates/main" } [profile.release] codegen-units = 1 diff --git a/firmware/Makefile b/firmware/Makefile index 92eb50d..e9aadc7 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -24,7 +24,7 @@ all: load build: clean @echo "==> Building ($(PROFILE)) to $(CARGO_TARGET_DIR) for $(TRIPLE)" - @$(CARGO) build --target $(TRIPLE) $(BUILD_FLAGS) + @$(CARGO) build -p main --target $(TRIPLE) $(BUILD_FLAGS) elf: build @echo "==> Copying ELF to: $(ELF)" diff --git a/firmware/crates/at/Cargo.toml b/firmware/crates/at/Cargo.toml new file mode 100644 index 0000000..32bba5b --- /dev/null +++ b/firmware/crates/at/Cargo.toml @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: 2025 hexaTune LLC +# SPDX-License-Identifier: MIT + +[package] +name = "at" +description = "AT command domain - handles AT protocol parsing and execution" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +homepage.workspace = true +keywords.workspace = true +categories.workspace = true +rust-version.workspace = true + +[lib] +test = false +bench = false +doctest = false + +[dependencies] diff --git a/firmware/crates/at/src/lib.rs b/firmware/crates/at/src/lib.rs new file mode 100644 index 0000000..c46885c --- /dev/null +++ b/firmware/crates/at/src/lib.rs @@ -0,0 +1,3 @@ +#![no_std] + +pub mod lib {} diff --git a/firmware/crates/core/Cargo.toml b/firmware/crates/core/Cargo.toml new file mode 100644 index 0000000..350dcf1 --- /dev/null +++ b/firmware/crates/core/Cargo.toml @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: 2025 hexaTune LLC +# SPDX-License-Identifier: MIT + +[package] +name = "core" +description = "Core domain - shared logic and types for hexaGenMini firmware" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +homepage.workspace = true +keywords.workspace = true +categories.workspace = true +rust-version.workspace = true + +[lib] +test = false +bench = false +doctest = false + +[dependencies] diff --git a/firmware/crates/core/src/lib.rs b/firmware/crates/core/src/lib.rs new file mode 100644 index 0000000..c46885c --- /dev/null +++ b/firmware/crates/core/src/lib.rs @@ -0,0 +1,3 @@ +#![no_std] + +pub mod lib {} diff --git a/firmware/crates/dds/Cargo.toml b/firmware/crates/dds/Cargo.toml new file mode 100644 index 0000000..48a7d49 --- /dev/null +++ b/firmware/crates/dds/Cargo.toml @@ -0,0 +1,24 @@ +# SPDX-FileCopyrightText: 2025 hexaTune LLC +# SPDX-License-Identifier: MIT + +[package] +name = "dds" +description = "DDS domain - handles direct digital synthesis operations" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +homepage.workspace = true +keywords.workspace = true +categories.workspace = true +rust-version.workspace = true + +[lib] +test = false +bench = false +doctest = false + +[dependencies] + +[dev-dependencies] diff --git a/firmware/crates/dds/src/lib.rs b/firmware/crates/dds/src/lib.rs new file mode 100644 index 0000000..c46885c --- /dev/null +++ b/firmware/crates/dds/src/lib.rs @@ -0,0 +1,3 @@ +#![no_std] + +pub mod lib {} diff --git a/firmware/crates/fsm/Cargo.toml b/firmware/crates/fsm/Cargo.toml new file mode 100644 index 0000000..f9f52d3 --- /dev/null +++ b/firmware/crates/fsm/Cargo.toml @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: 2025 hexaTune LLC +# SPDX-License-Identifier: MIT + +[package] +name = "fsm" +description = "FSM domain - handles finite state machine logic and transitions" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +homepage.workspace = true +keywords.workspace = true +categories.workspace = true +rust-version.workspace = true + +[lib] +test = false +bench = false +doctest = false + +[dependencies] diff --git a/firmware/crates/fsm/src/lib.rs b/firmware/crates/fsm/src/lib.rs new file mode 100644 index 0000000..c46885c --- /dev/null +++ b/firmware/crates/fsm/src/lib.rs @@ -0,0 +1,3 @@ +#![no_std] + +pub mod lib {} diff --git a/firmware/crates/main/Cargo.toml b/firmware/crates/main/Cargo.toml new file mode 100644 index 0000000..dfc4e5d --- /dev/null +++ b/firmware/crates/main/Cargo.toml @@ -0,0 +1,42 @@ +# SPDX-FileCopyrightText: 2025 hexaTune LLC +# SPDX-License-Identifier: MIT + +[package] +name = "main" +description = "Main domain - orchestrates all other domains and hardware interaction" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +homepage.workspace = true +keywords.workspace = true +categories.workspace = true +rust-version.workspace = true + +[[bin]] +name = "hexagenmini" +path = "src/main.rs" +test = false +bench = false + +[dependencies] +defmt = { workspace = true } +defmt-rtt = { workspace = true } +panic-probe = { workspace = true } +embedded-hal = { workspace = true } +cortex-m = { workspace = true } +cortex-m-rt = { workspace = true } +rp2040-boot2 = { workspace = true } +itoa = { workspace = true } +embassy-executor = { workspace = true } +embassy-time = { workspace = true } +embassy-rp = { workspace = true } +embassy-usb = { workspace = true } +embassy-sync = { workspace = true } +static_cell = { workspace = true } +portable-atomic = { workspace = true } + +usb = { workspace = true } + +[dev-dependencies] diff --git a/firmware/crates/main/src/main.rs b/firmware/crates/main/src/main.rs new file mode 100644 index 0000000..7f872d4 --- /dev/null +++ b/firmware/crates/main/src/main.rs @@ -0,0 +1,43 @@ +#![no_std] +#![no_main] + +use {defmt_rtt as _, panic_probe as _}; + +use embassy_executor::Spawner; +use embassy_time::{Duration, Timer}; + +use embassy_rp as rp; +use rp2040_boot2 as _; + +/// Minimal timestamp for `defmt` (optional). +#[unsafe(no_mangle)] +fn _defmt_timestamp() -> u64 { + 0 +} + +// Bind the USB interrupt (executor runs in thread mode; no SWI/TIMER IRQs here). +embassy_rp::bind_interrupts!(struct Irqs { + USBCTRL_IRQ => embassy_rp::usb::InterruptHandler; +}); + +/// Embassy entry point: set up USB CDC and tick once per second over USB. +#[embassy_executor::main] +async fn main(spawner: Spawner) { + // Initialize RP2040 (time driver is installed via "time-driver" feature). + let p = rp::init(Default::default()); + + // Build the Embassy RP USB driver in main. + let driver = rp::usb::Driver::new(p.USB, Irqs); + + // Build USB device + CDC class via the usb crate. + let usb::UsbCdc { device, cdc } = usb::init(driver); + + // Spawn the device runner and the 1 Hz ticker tasks. + spawner.spawn(usb::dev_task(device)).unwrap(); + spawner.spawn(usb::tick_task(cdc)).unwrap(); + + // Park the main task. + loop { + Timer::after(Duration::from_secs(3600)).await; + } +} diff --git a/firmware/crates/nvc/Cargo.toml b/firmware/crates/nvc/Cargo.toml new file mode 100644 index 0000000..d9bb6b3 --- /dev/null +++ b/firmware/crates/nvc/Cargo.toml @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: 2025 hexaTune LLC +# SPDX-License-Identifier: MIT + +[package] +name = "nvc" +description = "NVC (Non-Volatile Configuration) domain - manages non-volatile storage of configuration data" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +homepage.workspace = true +keywords.workspace = true +categories.workspace = true +rust-version.workspace = true + +[lib] +test = false +bench = false +doctest = false + +[dependencies] diff --git a/firmware/crates/nvc/src/lib.rs b/firmware/crates/nvc/src/lib.rs new file mode 100644 index 0000000..c46885c --- /dev/null +++ b/firmware/crates/nvc/src/lib.rs @@ -0,0 +1,3 @@ +#![no_std] + +pub mod lib {} diff --git a/firmware/crates/rgb/Cargo.toml b/firmware/crates/rgb/Cargo.toml new file mode 100644 index 0000000..b712850 --- /dev/null +++ b/firmware/crates/rgb/Cargo.toml @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: 2025 hexaTune LLC +# SPDX-License-Identifier: MIT + +[package] +name = "rgb" +description = "RGB domain - handles RGB LED control and effects" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +homepage.workspace = true +keywords.workspace = true +categories.workspace = true +rust-version.workspace = true + +[lib] +test = false +bench = false +doctest = false + +[dependencies] diff --git a/firmware/crates/rgb/src/lib.rs b/firmware/crates/rgb/src/lib.rs new file mode 100644 index 0000000..c46885c --- /dev/null +++ b/firmware/crates/rgb/src/lib.rs @@ -0,0 +1,3 @@ +#![no_std] + +pub mod lib {} diff --git a/firmware/crates/usb/Cargo.toml b/firmware/crates/usb/Cargo.toml new file mode 100644 index 0000000..9b11775 --- /dev/null +++ b/firmware/crates/usb/Cargo.toml @@ -0,0 +1,28 @@ +# SPDX-FileCopyrightText: 2025 hexaTune LLC +# SPDX-License-Identifier: MIT + +[package] +name = "usb" +description = "USB domain - handles USB communication and protocols" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +homepage.workspace = true +keywords.workspace = true +categories.workspace = true +rust-version.workspace = true + +[lib] +test = false +bench = false +doctest = false + +[dependencies] +defmt = { workspace = true } +embassy-executor = { workspace = true } +embassy-time = { workspace = true } +embassy-rp = { workspace = true } +embassy-usb = { workspace = true } +static_cell = { workspace = true } diff --git a/firmware/crates/usb/src/lib.rs b/firmware/crates/usb/src/lib.rs new file mode 100644 index 0000000..29a1933 --- /dev/null +++ b/firmware/crates/usb/src/lib.rs @@ -0,0 +1,118 @@ +#![no_std] + +//! USB (Embassy) for RP2040: CDC-ACM device with a 1 Hz "tick" task. +//! +//! This crate builds the Embassy USB CDC class and exposes ready-to-spawn tasks. +//! +//! Usage from `main` crate (sketch): +//! ```rust +//! use embassy_rp as rp; +//! use embassy_rp::peripherals; +//! +//! // 1) Bind USB IRQ in main (or wherever you own the peripherals): +//! embassy_rp::bind_interrupts!(struct Irqs { +//! USBCTRL_IRQ => rp::usb::InterruptHandler; +//! }); +//! +//! // 2) After rp::init(...): +//! let p = rp::init(Default::default()); +//! let driver = rp::usb::Driver::new(p.USB, Irqs); +//! +//! // 3) Build USB device & class inside this crate: +//! let usb::UsbCdc { device, cdc } = usb::init(driver); +//! +//! // 4) Spawn tasks: +//! spawner.spawn(usb::dev_task(device)).unwrap(); +//! spawner.spawn(usb::tick_task(cdc)).unwrap(); +//! ``` + +use embassy_time::{Duration, Timer}; + +use embassy_rp as rp; +use embassy_rp::peripherals; + +use embassy_usb::class::cdc_acm::{CdcAcmClass, State as CdcState}; +use embassy_usb::{Builder, Config as UsbConfig}; + +use static_cell::StaticCell; + +/// Concrete driver types exported so the tasks can be used by `main`. +pub type Driver<'d> = rp::usb::Driver<'d, peripherals::USB>; +pub type UsbDevice<'d> = embassy_usb::UsbDevice<'d, Driver<'d>>; +pub type Cdc<'d> = CdcAcmClass<'d, Driver<'d>>; + +/// Bundle holding the constructed USB device and CDC class instances. +pub struct UsbCdc { + pub device: UsbDevice<'static>, + pub cdc: Cdc<'static>, +} + +/// Build the Embassy USB CDC-ACM class and device **using a pre-built driver**. +/// +/// Pass a `rp::usb::Driver::new(p.USB, Irqs)` created in your `main` crate. +/// This avoids needing to import `Peripheral` traits here and works across SDK versions. +pub fn init(driver: Driver<'static>) -> UsbCdc { + // USB device configuration (adjust VID/PID/manufacturer/product as needed). + let mut cfg = UsbConfig::new(0x2E8A, 0x000A); // Raspberry Pi VID + CDC example PID + cfg.manufacturer = Some("hexaTune"); + cfg.product = Some("hexaGenMini CDC"); + cfg.serial_number = Some("HTS-0001"); + cfg.max_power = 100; // mA + cfg.max_packet_size_0 = 64; // EP0 size + + // With composite_with_iads (default), set IAD device class triple. + cfg.device_class = 0xEF; + cfg.device_sub_class = 0x02; + cfg.device_protocol = 0x01; + + // Descriptor/control buffers via StaticCell (Rust 2024-safe, no `static mut` refs). + static CONFIG_DESC_CELL: StaticCell<[u8; 256]> = StaticCell::new(); + static BOS_DESC_CELL: StaticCell<[u8; 256]> = StaticCell::new(); + static MS_OS_DESC_CELL: StaticCell<[u8; 256]> = StaticCell::new(); + static CONTROL_BUF_CELL: StaticCell<[u8; 64]> = StaticCell::new(); + + let config_desc = CONFIG_DESC_CELL.init([0; 256]); + let bos_desc = BOS_DESC_CELL.init([0; 256]); + let ms_os_desc = MS_OS_DESC_CELL.init([0; 256]); + let control_buf = CONTROL_BUF_CELL.init([0; 64]); + + // embassy-usb 0.5.x builder. + let mut builder = Builder::new(driver, cfg, config_desc, bos_desc, ms_os_desc, control_buf); + + // CDC-ACM class and state. + static CDC_STATE_CELL: StaticCell> = StaticCell::new(); + let cdc_state = CDC_STATE_CELL.init(CdcState::new()); + let cdc = CdcAcmClass::new(&mut builder, cdc_state, 64); + + // Final device must be built after classes are added. + let dev = builder.build(); + + UsbCdc { device: dev, cdc } +} + +/// Runs the USB device forever. Must be spawned once. +#[embassy_executor::task] +pub async fn dev_task(mut dev: UsbDevice<'static>) { + dev.run().await; +} + +/// Writes "tick" once per second while the host keeps DTR asserted. +/// +/// If you prefer unconditional ticks, replace the body with a plain loop +/// that always writes the packet (and remove `wait_connection`/`dtr` checks). +#[embassy_executor::task] +pub async fn tick_task(mut cdc: Cdc<'static>) { + loop { + // Wait until the terminal opens the interface (DTR set). + let _ = cdc.wait_connection().await; + + // Periodic 1 Hz tick while connected. + loop { + if !cdc.dtr() { + break; + } + let _ = cdc.write_packet(b"tick\r\n").await; + Timer::after(Duration::from_secs(1)).await; + } + } +} diff --git a/firmware/memory.x b/firmware/memory.x index acff7e8..7ac67c2 100644 --- a/firmware/memory.x +++ b/firmware/memory.x @@ -13,7 +13,7 @@ SECTIONS { /* ### Boot loader */ .boot2 ORIGIN(BOOT2) : { - KEEP(*(.boot2*)); + KEEP(*(.boot2)); } > BOOT2 } INSERT BEFORE .text; diff --git a/firmware/src/main.rs b/firmware/src/main.rs deleted file mode 100644 index 9d9af23..0000000 --- a/firmware/src/main.rs +++ /dev/null @@ -1,132 +0,0 @@ -#![no_std] -#![no_main] - -use defmt_rtt as _; -use panic_probe as _; - -use cortex_m_rt::entry; -use embedded_hal::delay::DelayNs; -use embedded_hal::digital::OutputPin; -use rp2040_hal as hal; - -use hal::{clocks::init_clocks_and_plls, pac, sio::Sio, watchdog::Watchdog}; - -use usb_device::class_prelude::UsbBusAllocator; -use usb_device::device::UsbDeviceState; -use usb_device::prelude::{UsbDeviceBuilder, UsbVidPid}; -use usbd_serial::{SerialPort, USB_CLASS_CDC}; - -#[unsafe(no_mangle)] -fn _defmt_timestamp() -> u64 { - 0 -} - -// Boot2 must be placed at .boot2 so ROM finds it at 0x10000000 -#[unsafe(link_section = ".boot2")] -#[used] -pub static BOOT2: [u8; 256] = rp2040_boot2::BOOT_LOADER_W25Q080; - -#[entry] -fn main() -> ! { - // --- Peripherals --- - let mut pac = pac::Peripherals::take().unwrap(); - let _core = pac::CorePeripherals::take().unwrap(); - - // --- Clocks --- - let mut watchdog = Watchdog::new(pac.WATCHDOG); - let clocks = init_clocks_and_plls( - 12_000_000u32, // Pico/Pico W external crystal - pac.XOSC, - pac.CLOCKS, - pac.PLL_SYS, - pac.PLL_USB, - &mut pac.RESETS, - &mut watchdog, - ) - .ok() - .unwrap(); - - // --- GPIO --- - let sio = Sio::new(pac.SIO); - let pins = hal::gpio::Pins::new( - pac.IO_BANK0, - pac.PADS_BANK0, - sio.gpio_bank0, - &mut pac.RESETS, - ); - - let mut led = pins.gpio0.into_push_pull_output(); - - // --- Timer --- - let mut timer = hal::Timer::new(pac.TIMER, &mut pac.RESETS, &clocks); - - // --- USB CDC --- - let usb_bus = UsbBusAllocator::new(hal::usb::UsbBus::new( - pac.USBCTRL_REGS, - pac.USBCTRL_DPRAM, - clocks.usb_clock, - true, // force_vbus_detect: fine for bus-powered - &mut pac.RESETS, - )); - let mut serial = SerialPort::new(&usb_bus); - let mut usb_dev = UsbDeviceBuilder::new(&usb_bus, UsbVidPid(0x2E8A, 0x000A)) - .device_class(USB_CLASS_CDC) - .build(); - - // --- Main loop --- - let mut counter: u32 = 0; - let mut last_state = UsbDeviceState::Default; - let mut ms_acc: u32 = 0; - let mut led_on = false; - - loop { - // Poll the USB stack every millisecond - if usb_dev.poll(&mut [&mut serial]) { - // Optional: echo incoming bytes - let mut buf = [0u8; 64]; - if let Ok(n) = serial.read(&mut buf) - && n > 0 - { - let _ = serial.write(b"echo: "); - let _ = serial.write(&buf[..n]); - } - } - - // When first becoming Configured, flash LED quickly (visual cue) - let state = usb_dev.state(); - if state != last_state && state == UsbDeviceState::Configured { - for _ in 0..3 { - let _ = led.set_high(); - timer.delay_ms(40); - let _ = led.set_low(); - timer.delay_ms(40); - } - } - last_state = state; - - // Send logs only if host opened the port (DTR set) - if state == UsbDeviceState::Configured && serial.dtr() { - counter = counter.wrapping_add(1); - let _ = serial.write(b"tick "); - let mut num = itoa::Buffer::new(); - let s = num.format(counter); - let _ = serial.write(s.as_bytes()); - let _ = serial.write(b"\r\n"); - } - - // 1 ms tick to avoid long blocking delays - timer.delay_ms(1); - ms_acc += 1; - - // 500 ms blink using the 1 ms tick - if ms_acc >= 500 { - if led_on { - let _ = led.set_low(); - } else { - let _ = led.set_high(); - } - led_on = !led_on; - ms_acc = 0; - } - } -} From 3a4283255e021155d4084d93c0834500acd5c883 Mon Sep 17 00:00:00 2001 From: Husamettin ARABACI Date: Fri, 26 Sep 2025 04:25:19 +0300 Subject: [PATCH 2/4] Added Bottom Plate --- .github/workflows/release-pr-protect.yml | 2 +- mechanic/Bottom.FCStd | Bin 34975 -> 108345 bytes mechanic/Bottom.FCStd1 | Bin 13973 -> 108602 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-pr-protect.yml b/.github/workflows/release-pr-protect.yml index b2fc301..e0aa904 100644 --- a/.github/workflows/release-pr-protect.yml +++ b/.github/workflows/release-pr-protect.yml @@ -6,7 +6,7 @@ name: ❌ Block Non-Develop PRs to Release on: pull_request: branches: - - release/* + - release/**/* types: [opened, synchronize] jobs: diff --git a/mechanic/Bottom.FCStd b/mechanic/Bottom.FCStd index 0cae82de53d1314a89ab8290e22fe10a93f7a9e6..375878696a89218325cf3c9722b2d8c3b988c3c2 100644 GIT binary patch literal 108345 zcmY(KV{oQV^rmCmwkNi2+qTV#ZQFU1Ol;e>Ik9bP=l9>O+TAZ*U8m2-uIlSL&;2OM zfP$d`0Rce)i9~Sfi0Fk4A&>(BEgu5|!Tqa>I+(cGnc2J2d)nDv>FK#_wk-7A)XrUG zZ+E4=eeF5@9;rWYVNPDM&oN!tHnogwS)V8jD@=O*d~YOziYmZBqf(9&?Z1+>O$_N9 zHuk6|oXz{X7+o~IrIS5Y;`M#1=jVnQ{_0ubU8Qre^dA~|;{NdsMHgil3 z*&BX4+GQr7%NwwI{|WZOLLgXlWf$P%di(zRxFxv80zbIf+hUX_fOv6Y_KZq)M3UQE zEhP$Nz(xq~#UmU{uubW|I%V>K;XiTVY>0#4korsjQy7-mP<#=%slC5^@K6NPYm=A--&}b zdw~1q&!3i8Sm$fC0vY1OnOY>$n=-&(&$2p?J0i@TgDxQTi!nbnyeT{rm;}f!w$M$o zUW6MvIAfD%E7aYOVBVo>^>^H*Iiz1ef4ND`uers$P5s{ zkJcKz;s*9I?0Nr5lk(7AWpiyE%76mEPuIn>{b;`Mi2$k8;n}v2(bAsdi3-9A`V>e|DJDV@V`o1*{S0{Unw`wv6er0^2dxFIMYq~b&-DL z!;DQfKWM^DNVdl-+Y@>)Vk2tta5mUU{~BURsK~$P`pWlCnH73KMO1MT^63WB_$6)e z;kLNm6MmH=3OuuT1DbFz%fJ|_dJ5LYjinS@tXBRT1XE@~SvaT%aS@1oO-6qInd$pG z-;x)h^i)-UlnF^%63ID}I^n|*1W!vHfWit?O;cUMxA=fJt)rFd{`*oTWO6|ve_KCo zTbF1IF8?n|N6!Zj zUjK}#d4fM{8=S=+TAB@*N1%}^d(i2Y$pfAl@37#2qUNZN?!Ddh&iEj@ewkT(;o-t2_55 z^9>v*`csn8&0YwVc2O5rL604Ts-ca!%vSbCj_om zuG8H!wv{@gmW$&k1yvcDToPDyAdhI;m*ON2x%*bj5i@PcamBJ=V4qdF1?etstP7^_ zk~2U726ulY!@Cw=#!01alE|TlQ!B z@ibaI+(Gaz=s%D_rS!);%)fQ&a2Ys!O!*dHP3nef^t%rfq=kZ{VUahVnR}Y_nrUMoNM6Al(LXoU8Q!6dSCd{G{*FR_X<(GJs7b3F3Iini-UINn1C z6TyJK2AUyJt|S`|BU!DBP!Iwevd|z$${x)oWV!7}A@F1gW$UMG{Eg~D!Cg}mC{k<9 ziMFHet93BCPM}H)*XFpg`YU?#%_XtkhyO&DHD|MwO;+}R|K9w z=nKqjlv@$$^YsRUCey-@K|r4HieLYPkw;X}l7_!XBv5#NT8zGGnGiC<@igc652U+TMTx)x<+IZG>Yxo)|vg2A>ZCtoe$^ov&}jK7+QnU>SaDGwQbYZVlX!v}kh z=@XYmes1sSF^j+lLsY3`_mCLTE{R2CEu6Tp#$OjorR=xkby*#13IkN*_)CT$?CR_* z``O&ufsL}owfA-BKkoCw;U}{t(kiQR?`-+F%Z^AuEGRdV;|At%)=GS)` zU55#KgwFuCYpXH0D*lZP%}O~b1x%sq@Wht3M(36LCbvIF;hx1$eFgjEwfiT`_J1|r zbA_DseVM?q?J)c5timmFxb1{_V!QpU)!1xg?Y(xK@PxtdNuPfU@y~W?{K~&6nYs#V zf6+KTwm>C!@sK%=ijR>#PK$4Te5u}SN5_U~KuK*sbdfzyniV=Guo0O&@e_;+nrja0 zIBD-Ow@ka>Dya>0s9P0o#l7A(0O**O{i^TOG1gEOpJ&A=!h@q((Na^9Lwjk#gJa7( zqFA({^7`}H!GLN_8&!~UxWzQCgPLSHkR^TZPUfXYRke(_y684rPlvgWw{)mCZ497b zxc53XFN*;!q0{W*Zi8f9^^hHO@`c5N8OjB+hoGhYLq7@jwz1{P5)s9ajf3&=%PTqw zgxt$R=H6JW_rkbBQ&CiEJC3Z@`E~_V<|sfgNvOGI&D)=xp|Wp7`8U4YFt5U*;bWV! zrt+7k&blj-@fHZL4mdUmW15=G^aATdr>7LcoDQmv1#zW^oMlBE0- za~b(W#2-t?SsIpt#i;;Tsx9ecqO1}z`OSur*dri1hl)y%y&GdS28c90)v}BIOuRq{ zb}@)0NQBc_v;+i}rP@N%yg&wEXQEGcRFNlaQEP`mCEieNLC=iuEWLnUetvOiA3s~5 zv-{o#nOg~SFkRtTF-H8vo8cb%PDp|Xs3~IpqSl8=vUl-1^zoPO+}>QjxFlC(S$m6w z%6#9&&9^tI*q-@xk(h6LOAwPHR_ZaA0Mt`z z#UqW1WZ7K|Jr)%fRazjbcE_mJ_!Cu%uH-pg6p@rk)pf2UIvz1_K_HeAL)CSEhNxr+ z$%@uQ4oiqIOMc~ID2kl<3Mq${80$YLij4jC-!}EXZRVRVc~s1Opoam0FHA6e)mzVd zda-IlgbI!7S-iY{2Z@~TspE`B?s$@h1YToGTuA$@lZwqSo_5DxX3ZXF58#6zn6k2s zR4Ls|;(M$Sb-R2MA)@3Y^@%JkMK&0kh=n)QDyT?1f%|B4c#HdQ*=O35p~j!P4Z4|S zV`eXUbsdWuIWAZq0VE8p$&RSSbl2 z3JT+;U=k1PK4Xerw@~VPJK>u$b)H_Nk=(Y7kK;ZNYJ$S-gUW`e#yofi3sA6QW#KtW zfO=_9HfRD#QPXKeh}nLn(-7}YwiGI4JI8Ec&1YE4Rdi|_R43`0?@To^RddM{ruJ7% zf($Pf{A3|F?^AR{93T?#D=!GgSU9UTkwqukX-9xuaOGQ`SnVF^ikSV_q=k;b=e9*u zs5Og=*&3-~8U&A%WC(ne0T}nS ztn6xwA(X@cww+!?S$x%1NXVycl^7GSwhGdEfcTb*CCi1b=6S1I8xPo|3Fu{f_XQ(p zIKcv`xFtj&wo0kX9y56!%Rw2mmgWK+H%~a!1Q4BFmG(WbLB&+O?Ftg6g67Yh_z$m z;9-N^o*+QD%Kb#K45^Ad&stBy7C=Ea$Jpt5QHInqmY6*){_l9`X=7d#AdE&C(p5$Z z3a3t)tT5@{BK-dyS4!jui-aZwP9OydKcdSk%m1U{>4jm{f-u1qMFV(W z>ISTw^1`vCB5d3oeRWeK(>>E@5*c|6WuF>TSe4mO#JE0gJPa+^OX+{wd72LnwP)!udt=@d2-+2@HG%jJ9gZSe`@n#4*>vS&mS|zh~|gS7n8S zO_s=6?LKhD96FY$ww4Z;0|}y4QuA zRRhyUyJ2|Mev{gdLp%C&|Q6I!fPR^}XLZ%csS_r+XN=_$j(kgzzH^Hnt73 z&+2gA2AkIvaW0*1yeF5V2wj_3FBp27@f<*@Az&8gO)_%wls{{_Er@*T=UaI1F_5EKcuD--gBIrV6fw9k-WU)aSWq zAua)|29UQJqn-_!;m_jSAhk=)i+;Bl@ytOd=G`?CPXj>9KDd3%g@bvvoUB^8m(|(e zOCR6>ezV*U=Oc5DP{E#I4qi1iI!7~IVSJB#({6Bl1`f%^m^F6OG7xS6(pp4v;xr5I z5)Ef!wXi1qVPWqrbe3dH3Mja(TlfVVEmA@Ds#X^YCLg_3=SX0DdNa-lNp|jvqs+9@ z{#qGgupLMdYuT#xislD>7Nm}q&@VYmTy2Os!t5c^Ral~3sfuUXRY*HEYj}CA1!mgQ z#;j=8r1U?kYv1g{U}h%fRREi`Ywa4lG;d>d^bCr1ojkT#Mp~IhpVd{%8@&Z{R9t1I zxo>8qde8E@TisO;J0x~;7Mw#db1|MNu!*RY73qS53cG9M@l+Q@`wW%ET&x=bF_7|_ zis^lei_VH5iggXd0Nvh9GYzieXVjO&YAGO21@YAvUkd@e`rI38%{auF)g}&lYkLO+@3N0L`-{-Qpj`G@DI3FuO!yhhnwyNU zg8{2$j{*>2QER{DfMkd!VU9?&7q@6vo}E0@3yQGdo^#1B(iiV46MYhT<|KGY9_uX} z3>jH;hPppvO~0*nl2GJv!Q7qpOf^NqVJP9{?|Q1=>HwiQC=286n(Y0RZEP7igDv5XP(6~=CBBku z>$xXHrZeP&!Mze=Nx-f#t<13z%^ff`pR3YRihidQqw-ecmYf9E?tr<>gECbYFUm`o zRvdx#r%pL@>)%PY7v!gSZfM+vh|ke1j5pgl##lIMZi2F}ZMonl%9oTUMi^dOOzK&- zUxke2C%HC+*IaE9U>V%zbpRhHC&@SJrN}2ljq2Dc4h6$f?uTj&SQ&((;$7HIwh-;_ zXO}o&rRki!l2L>5&}Z=u8pi05aUK>zBlDBbAHor{!V|Dhv*@lqMZ_Cm%Xd;`iI#R$ zaLG?mlV?1uF#-U)e^_+G1?$bQkamm4ZE!>n-L;s_5K3veetneVoizdMGT0-vgyrE) z9o|^ug$`*vQcO4GiptMnJpz6)8F0?a=0=y$f@B??wbVw>80N><#htcVp~w*ybnw6{ z?^n;s!7@AdnGl~}%M)Vxz*4}@QA~>OML63nIPzx`=R_}B48WW;uAiOBq0A1D`PRtK zJGsGkQ5SAJvG|4Ad9(B)nh$+N&RkBr-l0(lNjJ#cA?>YiTH)}AKo_NN^}E^!J>F4B zg6zgJ3Z1yIMFzXJmkcydU7M&R!?JK_sSs_2-|A#ci3A`DVm!OyDTum~uC7gSmv{6U z(M`^mr_?m$0+rV%XptN;kK_&~<2DOh5bq!DU0U9ThkcOz%z@|Q2F=Q$q*ZgD$3y(* z-U49x0*NJ0ny$IAJmTWtZfcrsMl z+E+WmW1>dXzkS`EeP28{rPC|@#Rafrg)q#i$Q`e%k)COHN*Nb+gBJ2kQ~hK?s9>N< zt-i5a2rLZN31)kDFD^V|l0&Q3{0r|mLuf!L1o|@EY-ar*0ZLe zklyT;JPFMwzyHTxaOXJcv88D?Z~Qp36oH12-DO<=$s{5;M(pRln*v~Z%2n}oxDpY(=keQkBo1n(*rplGnJFJ;`Jl`FK%r9+jaB%$JtpRuduqA1 zbj`?TpN=;~@rvW)pIG6<5JcNZywx|pGf{j;h0{C$t6(dDO3Vy%lf9|W4rl0_#q+y7 zz@qNORdYL%`%XS~L+8lJ2VUL+N8w$TrnzI`-$Kv)u({7IpeeNs%X9!S?4R+aQMOi@fTG*4Xp=rqqBW&t`f%*H)@r`j+q$G5E z%b;ia@ssE}5a9L-(1GGC7Q+GW%(k%gfuQ*2Pjr(@v+j{gJ7|YU&4<{`C>Kg8Y~qfe z5sb+TZkFJqE~Pu7DU5P3QSWh8iPz$(O>~sjswO5va?xfExS3HiNgHHmPTWFY z)Z{|Pp~$_emxK>f7Ut#hT`7aoCTvp8SeJ#-?HTu zfr_V`B^iAah6e)(Nm1;FXa6{yq)R=*FDywG4)0!lUOl>`6h|96^8_Qgvv0OOxJ0b_ zk)CuE3F#TP-Eu;88g*Y$6v`MV1S^Z~#k8U{-gYm%o0Lc*gWC&xC@Sa#A(xdrZHDuZ zq;vkM&29PscTqU6bQ)YpP&QI-<1ph0R7rNSBAB8s-HdC4zDd1$_DM>{f!>78P;BYpO_qwTWt6D;~MiWy!N z7mj4Zpa7O)7ugbM@lqI_){w{wq8y7F>D0{ys+tLI(G4hY=7DZ21*8Bne*uY+;#aWp zr~Vdb7a8QI7&bk$B?@SmD%6~J3{WgRdvJk7x(*01&aPsB4A8?YxGLQ%rA>9BO9EdL z-muV@HAzdy8aSlUB;BCUHd0&3kPr}Vrb~jr<5YtxX%MGksPTM6^ zWjaQIQi=W_uWbPgp#9*<-I@UU zjdnXLzP2Nss!{y266i0RC_L+$ShvvV1Rjc%uwU1w+mluQj;mu1tR96UtI#1Qt;4)bH zqk@4@q3I){#*$_sv;nW5rVj~->lrmxQc5lfjo(#$t};YNU{LWrVltTyXh&ca#bQ03 zNF(0#GHY4b21@~MqW-lN_*;@j0pt1}-YZ-qSdu~uXcSoUT*(brT&`Psh%*OfM6WhO zwHCqWi8cEpQ)6H?cV&8w0IiIc6UoFQ8nC67w!(Xk`XC=yNE(!Nb!an44oJh$GW>Ka zZCPe3e!>@2X@dUzT-DMXpWK7w#c~|Yg$)t5fhG^FtMxT~hmza1EB5F_i0-C3_p&_n5=#~ z0F|9`!bp@OEf39ij7J%2Ov8`;IO7jbM?fs%*g}n28%Eo#hdCw5$<%nI1{1*ohqP{(}C_*GH?Hy>YrnlQqm zma%d2%Dr34+dE)Ss}NwUl{M9*pRYppG@2J8&dnQUMddFq%yyWt7wBQzLAX(I6`_0i zF#JxnG1Kzd9@|WU4KhMIt=_OdZ6kkLOy7WYbmofs9BmgN=1)%AYK_-5!?kzh-^-I> z#lme(-vAq(d4Ws^4)IGIcg1N~ZNE8**M()C^voO<%kA>!;sR55%t0YW;^;>Yi~FfJ zlfJhvFM|-;Rl?JQcL`1}o1TIhXuev^zpx`z%yCzC^oa$s?3j|>F`6Za1!xXOD?X}Y zpq*KO1^H3h%d2Yy*#82?*)Hq){blP2ho7EygF+#UYf3K&(Dd30kpGeG%YS5h?`4Ju zWtNW$$#k>twtH|v*f#m54W#E4tI$i1r?z@Zlfdrtk7OrG^C7=A5l+o_&RG6FFX2v8}^H6nFmyvl_2=)kh+eZ~TmVSigKs+1oyJ842#R&`9Q#gxm=lC;2rm zG?kgA;!PN9k!*-l=t8b$Ogz}i zD&2|*qLnU1KNOHcv$IFDBkfi+>XT^dV4W3_PFV}dT96Xh&nrOOV~Bb5N;2U&cg8w z^7vD1wGMnX{Ys2xQS5OF)~hW`F&kP1KWdCP1jHzbK7<}>^^e4VXK_1}#4qEhD_ zT}2()*h<3l?$3kr6|Vwieomx)&^3HK_h3FaywgcA1|*#wl@olZWeLTY$VfZrn z1LiNmZvm6U7RcF)dCNpH;->Px)>ECnNN=c6``AzBY`Keoc{db3QJ@W~G)yvEbxOuD zH|jT{*7>w$tE&SyF$!E7I2jGCwHeSVN=Upcl3CAd6=iH^U7wb#v{$5U(2BEJhK*Mw zKiFh1z5B2LhKS)&cT>zvoLruoT>3Z!csV)bJ~|EC#T0EZT0Ci%^k}F5G?U}i>x}ZU zc9IC*@8jt5@Lv*1a{0-j_w(O1`hRm%-ChdUh}1wpUxL6u@c(jCibl?^Dwal$X7t9+ zj#s%l4o8yCCp%BnGY1>m__uyutmd}8Ro$?UeSY*YS5Bb8^d|HWpI0xKiM%K*EJ<)t z+<)j(ts#6}0g~e4rn*1KZ@1aKA7>o?FPpu+pVt@uzF!Bc0-v)-2IoJ%Zw9?T*^>gk zZxjKIN6?0Kc+Ywa**n?sH1SxBTwwm62F| zj|+u;8cYTOu9L)9h5AR^lUcr(_7nPE;m`$L`sqJCP3fiY3wL4+25>%16PTz5J{tq) zo#=XPIvTfiHKEyrImyCR6L(}k*u>rm48MC$52Mo&Wu;FJI12BN?L) zR|=zT)JEpz{bK7}aJvD2Wu87Il%eD>a`>=p*2>s*D~DET$vhI-rqYwMQ)4WvqVnzR z&AN}y!CM(*$E9kv7s3c5U%WEz1OHy#ZBTkeXrR8B(k@*nL-p`@U4OA2K1Qn0)L5|W z=q{?a*slG`rqJgo!Fku}*{82KKD<%J@3?ptKOeli%=W%(Z|p%0UuVQ795p(hwp)(k znXlMeNGO0u-oEbX7-wJI!Lz(3;ZXDtzCpqze2}^$A1CnW5$~v1BP{bLEEB_@6%3`ZAV>WvnkDc?SD<)}R=GUJEki19zKiVOC zqKTFf>L8Fagm`Pz29VZQ9-}MFYdoL(QFiFwzaTL|MR>d_euZhX`P^u1e_ly*7^|2_ zVX19CVZhx-UN$xXOV@jcRkaIEP)qM>`oV8{OOv#y^w?h!JY$Fm<(^S=pWF?J3 z=M7PvO5dio@0b`^9aQM)H5m744_|IM+uWeH9A49LkTnza;kLrDt6|)0CH6$5ZeJfo znIl zEGDfgtotN#xrq4NPk5?)BMC3*hX2kvamRUc*qYWmS$+0O30$F(oUc{F-3oqw--uu4 zM6_dxap9QeGhegelex&;cCqYSd}-Q_JZV)?aJM}TtGKzS$d;1glItCQvFHBE8*I+p z_}X?)pEwXrnEfh`QgSZ-g{dl?b>PfyCTy|wEViXBXi`f>$_`|FZ@Ck z-n5{i9DCGBSSWYZEi;es#&MQoUBY+qnT1|t)<4^;=Gr8FW@FmHk|*g?0$gz~WQ$gG z8hk7F@E{2BS?Yu14x9h&o5UB=RKHP%RoxB0@O`P|O{D6Kyw+OPZ*~^9V|?*~K+W$X zoY}^DoKzxozdq~k>@)0i?0{vThc-{hXT19KINjfu1#XvNUwc$@wXxgzc*B2lwDEN) zce1zTqNK;3{-T*M3y{SFGgNXPZB6JVW@P|wp?2PnU29z=iPlui_@kG<#+3wq+Z$jPo4kQ)8QQeK4lmw0 z)bJ@cd~b26Fr;h~BhKRSLh{r7=70UB4_V&#srle0XYitGZalrpCL+_{|4~eubyK|G z93jmPhGW#kHi}F2-8d`I{cbZYp#DXRVXSvZP*Hv*lc_%?-`jxqz$;(Aj{TlTt1fj{ zlfRvGE1A!~{AC#qUgaz5ErT}yY*PFzl??z5U~2c>J{|adJ|axgX!%%0X@->!n&%~T zAl?+cGw&*hXHqEG!e$CCgJcr=2s^P+?zBQLwHA}6wXq{=uLg8bb^(!MY zwY49icWJsgwdrSVpXy#&#DJ}9A>;1~`@RHOZC(vNdRPapRN}o7$Fyf=txBi6Th>Be z>lTc_)z0|h4Vk;2#H2bnlc%)1Cjz|k&MXG6D*?e))RUf=8KBo48AIc zkc>I7&xM}vr+Yk~sio3)w8dgaZZ(Q^W6AYu4l#w}-HE^XM*66z^lai=-<=OPeu+l2 z^PM|(OBLX0?y9)s5v1KCPTw#4MB{OCGy36?{>9TBV0G6En12xXK|mPg(wM!-@FdA` zxVCurvAsuqfvVl+=!$5x-qf#I4Zocb#xdv$j`yt|9Wyq{f}pmo{sCO=KOV?Fucl(ak*%R;3 z6`AN4zo*oW;dcWbsXDq&B5jDmZii-AS%Ms|SC3YBnsU20-2m@D>z_umzPtuM58cC| z!Z1TI+&et04?SJ}72!6Ffgo3S9~~t&=L=1OpEwQ8Zd=cGGEvPfzQ8P9FSY#A8Apic zJ;aFcNp)GHU2$`dgrn$z+sJk|)*7;p0@|xZb*LUYW0*|Dr|{6)(O(&(GD{eRGQB~pWUAHQ829rS6mClI4m`sK z!dt5Ie3Pw;&td~rns!?y-L|IY^b>uOz5-mJVj60~h!Xg=-oOK=Tmr9EiPnOyr7J2A z&RjNwRxa0Y*IhP*kIrLuj#2WHkH{~+QlM29|Ej_^^@Ax%2g2e{U{jgEqRvSLLQeJ) zV8wO9xfER9a7=}kX0M-$(!#VK?j{dAMF{G5RnZl9KXA|#7b2?u=pOfh=%$<-^y7dX zvzvwhyfJJO+N^f7tt+hhvG9N$e>T3HX%JPL11xvG;f+)Ooc_5GOa_HcPW%pfTPQ98 zLVub7c}zl}S`pb^aBnUZXc zSS!{t9E2an!Anw1w;JgfW@(NSEhnp_*Wy9b77Ub5fm4;wf(;%xYhejVsV_pu>Ii}pY0*#=2&D&H+Rrpdyusv@P zngv?Be#eC>Fmw8imV}Iy;TW!qC4GFu!Z>&|-*>5}SKtu`BhYQwwL81331)<*w(zTWs{{iEBe|EKiKVr$*$d9YKgFZv}O`z^`QHH$QEiCbeH)Sl|?RZVXOFb#6N7Zwj zUxWE{EbnxDdb#JU&$7h^rlRhQ&pu^k?D^I2rmDQu!mNW-iM-=NXWIH2^>r38Far{2m z(LXCnQpY-Id3%s-8@?v`IjKdVO788_0Pymr{A+NYJpT^0TB~(hCaf7mTSlcr39>nv zcMr-ya79Wz-WIqfDGzEbKaP#|GDsH9(x$?U=h0|ZK9Zn5>W=`Lo^qqBv=%eQ5gphk zdOecTCA3>oih>2dF3j_Hd`TnZ)vUtK-dq}Hqh@k0PZK>=peMgyzZ3)1d8(a&9e)0G z{52K?mYR^b;q54t{|)m;N8pBf$bolRMf1AycW+2YZKi4iv4=2Qr$x(O@Sa0!)3ivY z(9-;XS>mS}gnNwQyG(@peIiu_$hWVsqgN-J7vwHbu>&5k{v_`L6|Md6atAEbO`v7n zfb5vQlpBzwHc0d9%gXzbe#8Nfo7-0qAC9~4ccJ5qF1|a+iAE34j!a+-u+9RpN(){5 z(iFeSa2?5I9$ubs8FjoAn~u+a4FV_L@!^f@!GBJHBH8;6xFkgcH}Es5uzG>SGRHl_ z!=pvU+ai_)fF4TtydT2-G5kg5RY)!rC~W&YyHoWw{??ZI9!iENP;?n8$@eR6XF>ZK zVVrd@%_GM1z4{ycybAcgzRP^*#8GJXeE(+{3IhIbM~MDk2kE_^pHJxm583(u;o9rH zH^k&QKffTb5tphocH}hy~8)zmFEG8bN^`Ct<1xz>(T4x1wsU`I*x9KmCI&7 z&l?KhLEggt5*^W72<2~_l-)?#1trqZksT|if|qkP{yp|7`0K+sUP>0DXinVM`noWE zPprbC1HDrxU!KjaA^sxHeBa3W)cDV`m+=Uj*ai<-u21_Lk88E{rxW|2pRsy5o5~X3 z-7V|nD(abkF`b{ix~{EVI&z;q^mebKNm*U`!SIl~D@6aE)ZfUU4tT#72vHsG*Qem( z*#%!y*&L3R`*)=6i!RmN5;*PxiAi>PyH(- z`1o#yo{JJXk+yz|i0QXHOCgVeYYwpt+zS{lfoTI-doIPgKY?lcwwv!K%7455EX3sA z%x7;Tz-R!!1j=M5~}KVp}RlT@sV+)|D?6FulGm4eS1|atjpv zMm!twHfB=33fzioPYhX|^2Tm5nDQ80tKjE$lYSp!E=S{O)Icj%1T$I4xgHKb*DDq6 z`TL!WihkDjB38O3i03ZW8;v?|`SuNszzmclgL&B4hvc22Zc!fPob<%QosJbBdU0Sc zkw?JIryIL_jE{?3W-CChJG%ESEM^MKpAuW!rJZlIx7vQ15!1P-;ZdIJdI(}ys8Urf zoIcplB@~`7nHL=c!~_=50_#H>oVP0+qtkiQcEgYS2_>76Jj|Bsm>CJgTF%yKzfQrY)H^*(06YI5IS$bDo`u4}o&(+==c%H%Mz^S)Bpl3|t+iyj0@Ph;l zF`gC@Kph(<>$}V1?Z1VL$TWsMMrswy=`=`enJlz8bG~H4@;ttE5jPmO&^a5N^O-Tw zgHVHb(%EI~`)=l&;ZJeVI0!lu&YFkZPsF9?R6&3N@G=5%Sri3k@#6NEoHp|QJRh;- zKG1(adTupT`H<)TdEPVd?-{S20JeBMb-?Z~&M&4dffb;vs%?KK?5W#md1P}YL(*GOG|jE|uR}a;1~Cs>O?1Z_42x>KEB!Z8Vl3S6c#u^*3RJq?+);*aACrGbfT+ zo)=^ru@a3AG1{wh<|Y-2o3uqi`6nw0RS_YX2lx+;uJO=Ms!rQ`EYPmj&dM$*#V(?X z_sJoUNQ?uZ$|gQIU}JC5UK;3Nva5;vj-lL{T<(b~Lh+~tlMli`i`;P39q9y;aFEMta`Ce`q@r_A>3zMh z&LR(tSqi65(`hb$bAmAelm0t20^RvUHUsRV4(0S-4#n zi$B@=lBZ^2ixw@v9w5P;OdB=lLH)UiEW&Bbt6Ku(J3OhN_)`2=teuey!7%JFh>_kC zwNFVRn6#unwGIew+1()NsF6XPhZ(Uj+=?*SqJaGGI*ZVV)wr(PKov3Xl%wl&*2(iz znsr{yx6F=F1QwiF!cW$x3>HXJCr(4~8HniFTW==hbEQ--M#rZtXuRVrW+SH^9-ls1 z6`y~0_kjn6EH>u#SBlAevcD}9f^+OFMjcwd_UdmWdCd{)VPu)v%W>j*`_|VmO=Z%- z*a`xu&N3bUOAPWzS=~6N0=5SJPE{q+gXZUvE0WfSwbq9lx0P2^h!z6QMzHljfzUH_ zFl{o+jb`>CB{Z~5ff`-lN?f3Nr68fi^g2EZH3$}yh8xB-+qekUU)mZh=ROOi{NIOE zlgWfjC0N=#S@DL}NDVJJAuS2l|p!(ForA%#;O%%i9g7^y~f_x;k$b?lc1ouCw}!zeFyF@|9*;G&~lm) zZ7VcR)xF%95aHM+RH$H~t3ASVDTH!hGlBmyDqRg1?2*K+{?^X!UK^ofKtzs?-85-A zEiF3hIXdo0R(rbQ8;UDz)iX{k+oh(~K~X5rbX+h6Ym-e&MpSDpc6a#jPA#*dAa1zi z16Zu!>Tbxyfg!(9GoG{-;A`}f&0(aoZwHxP4|T3qYu+1ZSm7+F*WMaP<(wfK^2&my zat5{(4-G^Ku#?JKAF6Dv$7+K)^tc=1h7scM5{ZyV?1^brCC2#WVC_=YjvrD|AV}*g zxh6&EHSLxSm-?7cfiuL>M!!XM1^neJPG>dAT5Aha!X>V5LJK3~kpEo{kgwN6N^)KL zO&W77URDqC5S$1f@gP%udz*owOA@CRr-54Co^SNmT@O3;Foqe}s5L|JAgmgO;1V4X zwSg?{`1z4qJkDYKiVgHt&re)Vt=V*iA_}b-s&?HrP{zKBS8W&6PwsY#Gf5 zVjCY=btwt$LFB?agJugEwi>}6TCL8`+{^2%MUB;q-n|}D7i>fyN)c`3+WKd*P1!XC z9uzpGaso~!d#ND{QA~p!F_~Y1Nj3+1W~=<)#BZ#1o}6h{0Z~I2m{wfIR5;08ISjD> z+bHAYKEvqND}DR2j{BjY=K*ZPxy_MUgYuNKkP^huL{xgNcB|bNe%ZWcB4xtQ$ zL=Z`eAeL8bLevPmoy}Bs$n@tv!>mFk4#l?dvPrqVJ2F=;3;=~jtL-G=LLEb)!n;1; z)=i0Z2Hee9B-7gza3TzettAn#7LvsLK6RXaAYdIU)`q?K z;>Y25w%rpE8(Gf5t~(6dP*3uKYF4yx*hu8^EZJ2@LEJy=if)H6Mo`E!$g|TYmkK9h zj;@L|({74*$f+?=U_5NhWV~?o#i}#)$-e1m3*~8+R6!9|RK^DpDkw-STvoJ&0B(g~ zPK1O20ag|Ty(Dz}NJ~6M`Gy0V1&&44Y00mn0UVN~Lc$k@csNlav>-Ne)v8_7()02B z+p4F`--}*RSG16_q{&1-l4^=rIVQR%_tz;0k_2{h3GR>O)eu(dv3PhbIq2rBmjteJ z_2v7t)9uDaXqgiG0B+UwZwa$`r=ozpp8(au~3)wZXkSi-yB13ORRG|R+TMj8A8`CnX|Lx5<(mTb$mZQHhO z+qP}nwr$(IW!tu0_uqbh()}hmJUPh|Yv+#0%@T3x8i2;q;Q@qdMY2|zPr>{{vQU&S zV*lBxL$1N_q1RyWhwA{k_r4KOVi@)V2Hs+T=A3-73La+77R4EYI@~qGq9D<((r>Dg zy}h@PJGj`a1R^`j9-L_B^}GaCm>1@unIlswF48tpHb+Tl)FJMiI*Tt!36b-M=a@Z* zO;P)O`v-I@E9`sqBykhSwrEGyApM;NbG7E?OEtQad^WU7<}ze_{tAqoN1-6)8Z8#m z^BRZk_F?KnUPW31ulB&6M%inC=0VA==bHL(5(A80d3^na7chMS-^&N7M1IV3#*jFp zr}OSpgHFKtqU!Q;%;_QK;|Wka4tySR@X#NEfRstk(1q*PyV@qSIbWqwaF+v|e1OR3+U`MAy%xb#(zVhi^^za#_ zpCa6H^nKJVV+_L>*hfh+0hBrsz|IdpO+0H~p>AY9aEO*_*3wVUaXs3sJF36QAryg> z4$?>x9S8>C)Cj4kGQ=2VTME0Ht$nQwDJZCNG9~?0`@{)9o~#CjjN+Me2qJQRA4UX& zP=q?Q7{Enq-H{I0DGT0+hxY?^A!*&pN~-T_P0Q&3ZT^h5c|XcgZpj*Z4mTfv{h7#Z zUZ3T!JeEdvfef#zpw{T0kXcQvf!`D-U~I@-(+9&K!zw%M=RtI;{4xQXW^xylO5{6% zl38b85?6vr6?KqP)Mkf1m{rT9Q7&&KC7~vvP=XC-Ul}Kd$C7B5t-n|xQ3~wLs#Q=O zX{moXWgB%95!_9P@s*NaVM#Esel=x8ueh2V$|W0^L8OE@q1$VIm3irc+K=X`JrQN~QE`DGGte1y#Wh@-X;FA=$B>$T0BgGq7(E@fuzGu9gb~iky z{mb`_w_r;T?;{AOMh8Ms)juE%vlk8ySftCBelU!oV@ zF?0f4gBvtlAaJcQA)tRz6Lz3p!quV2mln zOSs0g03=HEbCzkriZmN&f*@bBX~B+=!h9*5_7p)3tygA~5PHtCfwin1&uSLNv9RJ* zQj}8*ZW6)M0f{Mk!Bv^_S%p(3uo9G;MnXWjU#CTj<6Y811p4+Z7>_vU6oz7IIDLLM_gVRL@mwu;N ztX?8eo#2~A6~DljJfO;K*=J%Ph_UcD#GZSXm308E(2&s76|#y+qI@#KrSz4Z1cN;Z zZIWPF<9#r3l2s^@5=#J*XK1&}kqjsp{-gwD9+?2LxMY|tPEIaNb^-y_pA>8v_k zJshNVs!QZME^6FAc}99op#j;6HXU~b+e`~+eUrk0E>-AR?sh9ey9sXH9;^i#bb6XE z&xjT1V5M1^=v(drAPTZF1^-Nauhh4iJT_gR!oH22-$Y zK8iLU9n&AQ?0#mhp6vusOa#G~l^n=9)g@|Og!Pge*Qc>nYUta^^CnczSOmIU}bd%n)wqRWBx;fp4(|m{k(A*62ZQE3H+G^NBYG#*%Fl3s3 zfXop9BmjBgvL@MswJdk~i!h>{n(?P6vT=Exg+PS~CR#q(Z|K{bMj&qie6AwL#E0pg zE(a0?E*V>)>=}e%)99rbL%h3(R|TOK61AK9Mwd&|aeB|pWa!>fTS-3gO#%S7R7A6%Luc9rx3>e-D;^cNPJ2WeB+ z4c&q6bZqf;68L(xx-^yb!gT=_RQN@=nJjcZ2VosHUsyn9plj4_r?=WdiyRHLttNiQ zJln!*YO=31DKM>mjCF@re*mt7ag-fomPQI=2F?gnjnN;?S9FRT#JFzId_Bd ziDkaF(p#B>rkO_G22xIvenmhE4iZ(b*7i&dD{W74udeW&f&u#%i_IG7hAIwYPKShx zE_!?QMq7IIS+j4HP@cD?DMPWkBN)1Hh~zJcrk0P1rWTLon&0Sj^3Rk+-2^yBJ#oh+ zdObm2e%E&Ign;emA?}bLDBZC^fz+f`f0eh>UAzmv zLJ8A&4eS+b#-kE|FPvnm9&ImAqzY}Ewa40WU)X71=-#!;P6KyvnTnJCx-CqWSLSn? zleSccc`xO#OJyIYO&8j0V7e3Mu$>#k8w7U`nZ9cfo8e^s$TqPsDUzG_=sG$aZl?TH zT{%OIl)0*H%p=N!M&m4c3>9hKtumocBoI&fc%RihF;t4x+=X(+NU7wbZodASlc*Jh z_8X6ZD=Keh^7+o>N7%2_P4k~ujq~PYkRTMkG@Auvf?`=UQdjtyoa-XIU~3-_gZ&^> zl9xsqMW(<-zV)LGO~1j(b|yFN4|gfvO+qX#(KpQ6CI0v}$K8Td9-1>|TIQx_!;xiL z)Cw6rEgJkmBneHcOdM65c5L<1GKJe_%tJuOytD9JJIV2P(&SyC>RV(FNPK=D-@ylr zeut;>fiIVVL^)ZnWtW{|xTvI;y=}*DuTsW}qf3zfT*_j?HwTY#Np)!fbvkZ4`G31{ z#piZ71TQuzENenqNPts_9x`tvNhmEUPNDUePd&_DSU3cf?3jS<0LSNZXEGHDY zgHau3xX`NF0st-RTux9l;A(T~-Wv1Qh`e=WvXHOWO(|kcZVh+@dgqheF;um!6M>#N zYbnzyKF}&uLV%kBrZl(fX;r~WcOUhJ&s_p;&xJXU)-l4ZR|~9(yoEl~m#spuTdB4K z!9WvbAoVpjaJ#FIdeiqeF)r~9s&_W`Nf*z@;KmdEDV+!ic(1kzMrHb%Ztx(`FTjQg zfd-fW5qAf*5Ilb=TpG=4QjUhP&d2?!2pyhThKACLBud?SIZma3J{~&4L_XIVb*wwV z;!YU4QeD`;DQ z_@a%lgYkTw%2ib%ha?ij-ic43Y~Og@qEmnf%;XSaT2lR{?=8lr7^q_->$(EfxwUo= z4D2TNvAA{f><)>sJRE9I@L4LUn#4tTPX5*ye}@PoF%OU2i=?(5k(stufzIs%{Fy-?+tIv991xB4tjdl13B zLWs;B9Tvozr1)@P=}G!xUjYJ!i23Ra8R?0~rG6!X((9cE{Q`eN2RWR!zSt=zY_Ik8 zk;goLH~ng6^fQ;B{h=FAcfsuFQy?cyro)5#+s-WP4RUZ*t{s1;rYRZ}_>_LbYP)R= zVxkX;+CQkNo9Q~jU~$~1Y}L_8l%l2D&=GDm!Cbc>Baoev9m7FAl%Wbtv7Wd<4R;L3 z5hHQS>9!Bb|H6P}JCP;u2tn~qA>PT)t`25gB>Id5dM(2p5~V4Fi!N{${RCx54~+I= zNWoSGcqa`5RZgR~>g*+uCBqBqTAwO!L0SsKv=>H8=TvH$Jx;bGROK^8>hr&NC!Bc5 zZHN7;@l{wnC`dw1*WePBYmt3Uyoq3a_Wrp)@ZMGAA94>O#Oq9lsoURmqN_I1esJ{g z$Ap-44|+Lvw}8iEo?ynGM4j^QjNw-9FLHlSRKG+_*ZZxWeu>aK#opEat@iIrh)S=3 zW@a#oo_G}MLiBo9Ml}14=s&T8NigZmw3y4E+G83NA$cjUhllqnXu+Yx4M|s%DWm)L z|G&w}hCAnX77ze{aU1{uxc{A;Wc*KbQbSfAn-QV+OZ|O4iSDtzcO1&gdPS<>6$h|X zB0|MS^82fA16J~Tlq&>Ji8YEXk=5FJx5ty2jr-HX>G|OunP2x?Plui^|K0r~u%Fv| zuK&-S{n^gLx8JXat9xsQVLrO~llOP$QJ^Flyy*AAp(-(r|Bb6MI+@qb^50x!*~V}D zPPDOpTw2t#DCs&+^3KBW_wbA=rU!%jwZ!boC5*k1{quv@2cg_OM@Y@7NNOmPF^w`t z)b6Pi-L}1()9V%<7wey8Uj(pOv5=(QOTA&@rFwofPIe5ivydh+3;dXLq%iN}-j;B~ zlitTKQbcyK zJH=<+?|18k>VqAJA}74dW5SLpp?YQn7;M;R?yz{{@9xSW&X9DTk)X~m2|>Vf!}b?V7HFwRz8I5!fq zQ(N>pQgdp;*eNm`ed-wB>_Qn4Z)hCPs)L`~;Lc2$uDhxC$YasiN-I?IR<#+S%C^5= z&&u4vd#+h;TuRn|+M{q&YQ96SrpEaAqng$p72!1O3MZUBfgzWJr0=GX$zu(&&|_vx za3PVzeQ}*XyD??a>aGI_tInU}2Zipccg- z0*Uu+#+>6+AxF(aEns$-dl2ErR=Edqk;btI_qZ<3&ax^|4=EnpT@Dp@^_7#_8tMu< z9@JWWl%XZgvG~gki9f|5m4+JpJQ6$Wyc-1*g`r z$gYUEh8P2K0FKAbh&Y!~<{+feS&0}9mLiOSq!l27mVs_Y5=hHIC+i4e354Vidmsq} zH_nrl4NXerkfx4l6q#XBKwG|EybT1cf@ru9zT64A&9x;5J1_2`3>z zgrljLZo=C6DGjZi;U6VowKKxe5wWM)eM#9n3W#v)@zrNY(yBpK+co9jZiD71tC$-z zV?%(@DAoM`S6@OS_31Fc004lg{!3q&{-ZBiTXtJw2)<|P_l>R8hIidQFxStOqR{IS z`Jm*kFc@n4(gEMTb2OBh-i0hFL@cz|Brt+7;oQvTvwyC;Iz8N7A8sFgy?cL~`tl@;mQ`5#6o+f z1hwp{6hEuwG-1q8%TZoPk_Vq}hCJaoi7BPLj_DO~VM;1~#v@Dut$x`Kt_*St_wc=xyMBbeU7H{f<`xXPq0c=U-S!XMOr?zK;-v&ZT3OT@p59W}TlX9mO^+0*zYo{u8}>;m^L)C97yg zLtm+WfKG8v8B_xU03&(8o?_j(>dl-1YisUUsXV8ww}P(ZfV?yJ+RF^{^dZP4W-(?m z4Ve(*tz4%f=1-Eg@==qzqYcngmbNF%zRw^2wYNRHHTX}Y;J*%k$A@2zb}kQIPyE*5 zP-a%9kM^puRlxOW;g~-fbD+t=CbUdBgLJBo)^ZZ>Ei%$f+p+p0Lz$>K+dtK)HlNdG z-fAa*QYI@5N(p(ow^ zKP_ANR&J#qFD~9N!td6zaAN(Hf5zjuILO-lzOyOfN_WIn7pS046Sfjn8FtXG#jAcw z9f1#eHSoh&*g~IZ>7#U=eP29ZKu6`WPlwBI2qU&ZYAR*KQy&VBgTc16WP@qhBKv1F zpMH&-Q8%sP&#+q_G0Sw`Iq%@6`=W5l8=KQ(A!?B-Z60Znyuz1j@Xj;@C#GUjSC zv>?Ko%;#UA-(H3rBem(n$jN&QMe3_OM@RW>ATMiRc@BgShI$wSom0;$%M zJJlb$6mS4mXK|Dcfz&xY(1f0MKwVKepdyM2lh>s=gkI6<0EQduD5_N3kY*e0&$xS9 zW*;!r5rN@zuR4l%!EOSCPieFa|5cGP>&i>M~Qd7<|y{W4>W1;gx7&Nf;+Dj zB;k%GmU>@XT}uIKbTCa3aN6@X2oV^JHaG;ZMo33E|6A`2YFehkP&7a&o7xO$Pzgzi zjR`3MXms2Gp_7aaZVYOsZiP*wuNh2YDWF+{(EXz1YRG6B5?Gi5DRTv=ozPx^G3S$B z$~t$!3e!CB+Kj}(X771yUJi8@h5FM?kqpa)w1BI;LPQsbT+!PQvJu<7W;fYgmWfq< z$K+TT2@1ToBHy9;6mi5|zP2K3J#0wc+K_ua!qBaRzhtB~mm}gt_iB_}X1%+ztdtI- z62B-)pW4!uLbZ^(#=J?mb&q`K;FPBtdlH?NjBL$kR?ZZaVegXkv~D_M-Z*AQSa-+n z_S<_W@Nza5y06M2e^|WsMC0>Lb6|eK|1U${@0XKs|1sqBzZt^(-wcVR`ri!6`#%h^ z{0~EDo`JC0WNE^Nb2FRG&D=I}diy!N{eKI4w|%y@?dtqn@K5M(PjsMG8dj|hHW3@SI( zTANnhnQxTZ4*fw?R2{^Vv#$)=3lx!a0l+JEp)s6X)G_Bqz}jP3;GrH|>VK~T`1K+PV)(TzZGpBM zDX%)`)^gOn+mJ}0CYlD2!OYKf$P|&ff`tPcO~4klcPu?NYvUwb!e^zT_dinH<{^)5&3c}(2UgEZ z0Z@?^AB1v~PLEpM#p%kgOfp+8m?d7yW($z)pMM=nk_0G4#v+Lnc=D3B^rpuZSB{QqeO$VG?Q0+t$AsCI3q1 z5wG$XF(WZY3bohK1p@c8!~K68>G{WzbYBY_RGh>UKZ^u1zI5L)^W^nBvgFPuY{6gx2@HNyrR_!SN{)4_76z@fduM* zKw{UryK<|2ytH%22)EbB%4zkt>@ptL(?Q10_lrFdN4h(Hsz?>(4`DlTvq2aAdb`S( z@)2{$n~|@@;yTJ~dyjqR;r-5uKcU22GDL%{ksuh+^qvSW+ zT^4+PcI~_xcia9^qnPwxDszQVH^Q5rar2HLikgg}VH-n_=J~QwJJh;9U-pBvB3t3< zj8|HV%?L22^SNhe_t$&qT;#?dBZ66Ex$mN)e>j=Wi&%XjFLmeXC`izf;Z+gRN-s;! zj-$P~$f+>167>uNRDozv9axoTpVJ_7NwCyFf1qOc0IfSt)L)CRLp?Dbg>udhQe8+v ztq@|*F*N~Nmr)S}b_WDyQ$QGpo87mR!#RXhopM%CUCXyI8gWjOKml^j4_KK_+>YkR zWs=*kBCB%)piZAdL&Vi645JD_B^0&&$B=-33^Dk3H0X$}DWR-W>rIqfdOrB*ZCP-} z)JDdEqnG|bk6B;Q)NN=KDq!WTJ-U$NMf#L#_=rAGoaH5lydi3$;J_Ke9>N{sjA4yz zq=0_d5F$EJrLY=QjjNaZ(|SVaE1M7+o6JXwXg4PrQ~WaqlR``{F|?c+F*O6@P@#=M zc%Gd|aUyd=@2Et`NzboDRH1JmA%jO86WGINTwrj`;CH%NDSiqF$|eY96T3l8DkCYe z*{Erwz$-cvL8q7++#J=7zzUmWT(DY1OGU?l(X>UI76pbzl#DLqe38|mJOW_tCcUQ> z=<*C%jr}N9Oo`#AftBcHOK4I3wloMH)J-gd6=9l1w7TvA(15ssmFCsH*7-H5}7pm)a~}krXcmI{9bn(Z`r~jaO7^#nmG7no22DFR|ZZ z(cHDZ7L5v;LhGJ!r*i9_yAMMt&NA_-1q7v5AZgSP`o1_S>yGs2MH_Uc-6I9$H4p5) zV6t$z>w8Hm-fqjR3fRvyUY{(`+UtJ6{|l1lLW4IyC;)>^c}=u>1!kI@0l5Vn}^Y z>h~RyY9jsk;{&s_(I5?pyzn_SYXJw4-w+A@{raqx8-(3j%Dm4UX-I?#1?Z%^%0#}0n|sf^<|yRaAqpRx$$1k&t-KJ z8Ger0Z%qLD1J}2iV)yjP!ThzWyXFaoB;d5NB)waMW~{#3l{U@ucmMuYf1C_s3;_u5 zjuDIk1n#K@HVUqF95*sG^;zT9<_%3r>BhYr0OR@@&j9RKl%WJM?NVYVJF|)M9+rsT zl(%$MISR~E+$*vA9k*24oGq+N=O88N&gwORBa5NqA zSzp--;cz(WJ1i_{%MY3wzopOemekCc06}tOUL%0C&OmNoO?nsyjsEqvc8#EnJidr0-^eRmb3Qb5bua8e@mD(7+Nz`E@BSuF*rRt6o(FBZ7%6C#?%s`f6gJ=dy zrk@m2+y1LhKz*ybnj#bl;v~2&JWB9sQBbsCneNjxSuKiP{N#z)E6+HQ5l-u3S=<`c z=j-Xa6wwDbSvrO5;3@y zw34b$GOd9xF^W+reFbb;es3;si1`wTz@ib-Mu{o}wMcK6wPwXCiL4ZN8@Z|8!=bjF z%z={hkh|^g`e%;v_xdx&8Opai=AIFYwGb7(g-bJ>QGUPdr^I<)Z%-3ED{l+g6I)oM zvzrg`7}53j`*bij!YZ!81e$UT=YVOx7AH|HrHChoVG#?9sQQ(j%FSkdj*75zrvW|? zBsN=KeVmVU&hEmlnAlkNl}daHe=W2%^uBbrka(1Smn*MtDoX;ai7P>zD)?6*SF;e{ zor#?4jmF`PUvWuqwaa!pzoNywZk~-)vNK+xot4WT^ZH>lw*KyNV-3b(+nu2w`eV}} zI$~sEx_cGJ?XY8$)V&RN+V97%7rD(=*>ykd76;axU4g z{@F`sxT&6-;-sM{Sl)%|GZ5DGP*Xqme z5m?3uE{5Clb<*z>Poc04)}RCP{RdZUZHh$E&tzvb=4i+XbiV> z2P5kQ^Rh*vA&*Dr9R8G_IOk0zak?M9ix&l!S}XMO;rpeVEq=YdzUDc`qK@zHqwe&( zz3m?FpNktNk(w~{fB*d1DJm6|aG{8vqKb3A4pcOnd9fHO$#JbEDW#ju!8lpJPW7}? zdv%5LJGmvyTr7*4Tj}HXa(aqm<&@M#$swAz%T&hkupQ3UH3F_bws6_mqKkBtsPy!x zYIVky*y-asN;wD2YrH96=V(WdQCd}JM-&=z)W27MHn_veO6h&_r?5weQ|;qZ@sDDG z5w3P6Zh0X{8lLj$f_0EN$U9=p(z4I8AELp!9dA@G^hCpTEy~Y&kq{3ZWN9n5HZmlGA6Va~k zBqx&%f9V8v6t**C-&%s}C89at4px1z_xL>QW$(>@H+#N+tab1FbbtIQyao4~bUF{% z+87Q%6o9!qKiC>;y(-Gl=BVkn_kOwa$GnZWjg$MzYsuzay1vy8YP@Ez7gMk9sPkg%R-O`u`yJ5TR5S# zmsTrFK2sft2G6vhQAHDoHw|eW;@@mTP$M~HtYfU>95R*(*gPdbej=`KUsZsFmSk}t zdos-}Sh+v2**8sq%sESuyccLBP=RJQFm6Q2Ls?W_$(!pb4YXE_2YIN1^20Y#Mtuo5 z+$vB8Qj?6-aQCIlhGKd`eL#5x;c)qo!7HC8vEG`syU#3Kj^xv)D_}|kyCiN%jU$?B zBM98H=RCr3nAUvQbj12ECxImS@K4Y8YvwI}&OfN{Al$Efa{>K3(?ec$<)X z&q^y?e4mv(w4lw$o8-1gwC=>LguG8iPF9A3SJco}I=*q!N>=Q|^o06=@(K6{T-mo} zSwY11%=AAq(e@s`VA~%_c6lNp_2YF-a#&OP0r|K>!xC0b*MSc!5=W2gK4({nV7^?{ zFIP|7;Qa%B%P7ZKeR+WWS{>Ur4iqvgTpVCLyb$ox19ioNVY*VKSz>WPFbI>+s{|fS zn~)_%B2sejq{1p_dOnejNRO!3ARJ5&PqSuu1+MF7On~lQlWQD20+3Ps{9-|oH@$sf z^f;1}MT4_YuYruPF{zY5yRD1QV4OlU`j0H$~A)4#z-J3OO zl;c$0h{v_?tqG@2OW0S;1g{?A@54jzht_`vvk)E-5_yc_!x_+dnVdv6I?odm^B>g^ zS=|QG5xy8cpx%%S5ofSFt_pWeL=tsx8gAd%d>o-#bIx)b<3e}5?`R0`%)QA07i&}+==P_Ar7hdBuB9dy zTFa!ArTECxlrBlZq$ci&nbEVH*SuD)8BvnqB-qY#p%Q^#P+ZH|7xVf79V01zDfUzIBBe=1eotvKR# zMBlsm^Klb$q^$Nn9xOd_dPpP#^w*~Ww`>-G?bmZ*BG{ zSu}X~E1|S5`hJh66ZHE2%RRpD@B5`;`2IKj?EV-3kJtL2{#*YKhkkG0ztcbVcYJ-` z9(zAe2U}nI_s7QeW3w)1{3ZTB4h!76AFb0>XjEM_m)Ms%v|-0#TF&?>F6HyIR+>eb+W$(U8P-qH-M zFi0WGP*be5Kg}^o|D65_v&<>9q8rSWV*2P2m!$4STfaKq;E*`fL4uSgnMrGvr1~04 zmgJV9-yUSqD$*+AG8P?GTqM9tUZZ{4qcYs_P`3xj+2gV zM!vpl5d@rvM7tw9WKm{t`(U9Bf@~dJo-Zl}b>wEg{SoqKi6kV_a42lIyDKQ4EoP+S zFu&(W=3wRGPWb{uz86iD`OPl*nq~-}G~Z$O!-%!N>e~pn%t%|h5b6sBU8*9cLJckOnVt) zc^7V(HIQL>7nscu;LxgI)(5)^O7sv=t(!KeAM7w>(zv{7m_h!{A7<)Wnh$v}fx!w; z*N#?gqJsur?;hV;#c@QuCxhlgJWOVZFgO;wMm`Wco60irOsu1;vHH!RZQv2c?e>FI z4k{iUW_xNp7}m0oFzXtr=C2F&8niQP3q&*>{q!+x4vB$w*4FBE zpgMlQB7|av7j|PT_WA7tJ&j^Lr)6TMIJ*I-ls3qAhbOWuv`cd9#Iv@69ds8V^m3CD znC~93n$@B974bl}d+Xq8Z5qI1(3sUI@rYfbEbiHsT%+f8$k+sFmRA~` zVD&pMJRJs?Qx@ z6=7?70Gl{{?I6R`xm^tqrh+DQvmM2p#KbxD$d32<;rV`l4-R_0W0x|+&;I)TeI4%p zdgK58Tq0Z=nD6~~8TP;H56xbF>{0ZVGuf8lp}fUNn+3IOLnBTp4voPew%~4G+pnkc z*4t1ZzQ$X)srqfvO^>Is+7PlHvYxga*Rh?KXrv<_O|>vTO{G-Yvcw!fuSaJbTH8lW z`=rI2PleyRDCVU zP`HUf@)V(#(0BgJs;kdD%I*}Ewh-@nuP%=8GG76zzvgvPIuMT$q=uju4b5^u?ggC)OE#S$FN zuLKo?1)<%Nw}%1k6mD|(b+zC7_V~-3<1c;Q_xsCuvwM`;QTGfEmB}Fm+B6(iSvP#3 zm*dH}Q+-=~*EKE_pXy8|>BO}ttO*X6X{z%yAiiwccMP zQR-48LD{D^ExPq7EF{&c!}F+e2}SPYNP|A^iX{tatP><(1WhGgu{X!t32UIR< z$QBxa&GoImAB8A7#!*Ln0JY}a0mMd3li6&RBpX^Q1qgYhPf(ONggCHR1XUNSa58IKYpfhQ=K|{0+;o~ZxB7**eT6g9U zTF5!7imjh&cd}wlFoQ~}ODLF#M#aJc4I5K+s~l;-4G|Dp4Wuy;iKWpN+dvargr{-O z9fuAWO(5D!3lS|N;4>5wT3iHxR(BTg?^}SYE@2HJvd2GQ6GKRa*nR<^lA%~Bj92u* zXwGPh6_f>{orurtR>ZU>W7%2_qM`Hzv|^~P?E|ZTs)&X%S{-@AXbK)twGvu$n7EGt zQ!Vz0#8!xqv*;G0LQ~$u+wxpf&B$p|l!FxoO-)fZ?Fj^RXCx7iilug$eKLL<)?ZcYhI~gR?l}`%BHM>d77rksW!=iP99yuQ`Z2r|6K8 z;|BSoDh0F0IVa5+5yhKw61+sD(<2Kq7R7K&5#ypuB7GfkvbTh-kZcS8G{vh)Ep3V` z>girsuvkeS%`=4syEXIcdxsHbcz`5EnFI}#)tNI)j(DAv8x32U8ZzQKI8SnL zxL~q*ywk$TiPb_XIS8?@g3Q**BAGP^sF&)FAr&%O9I@B7n4fGWl>VYXAZ`bj6p)Bs zKm%`1L@TE4V|Y$2O>`zRQdZ_eh7*);kVvqMdPN9`9kZg%05R0R#05VzCayC;qEqeq*J(1k_sGx1r zaGeq_S<`i6b;|hiic;QS4`9tRCyMUOh&uREA!Y4)C zwys!i`TMdHVJw128En1^mbof1pCGpuxgn8nnHOQkv0F9-Uq{KEJ0yg$b*Wo%# z%wdaCwUs$({6IZ*Y^V3Y>C*}G0m3uLWl0IsdkEkZ)gRnC^Fm3U$Cesl*lM9>j>NYN zzemcKQ!f*%LNP=V8ZNCL7AA7S#J-^ia)vq52@xw50%UbqrW0%hq)HM@`jg(f!cx^t zWhywcWZlKoOU8K9e3#Pi1w5qG*&e}vsp#WI9(U+d7sL!0C6jhg9!Fm2x#ehB>qgML z6UT*@_hq0sFch6)TD%9zQrM4y`x{C=TQ|!AZh`k@M)DnkIY4NWvx|UE-fg}S)~1xk z)`kDUzP}#6J(2~;#k0}(clAtB6*C0dtpSDe8bsgc(}E_4N+c6GAYc) zN0p+X$;PpHT%T;Nj(H2A_(in%b&|<>bqwhJJn4o=G@$Gbs}AK?aFmVEOzs1VI%o5w z7!EY>_Q|{lsh5n&CTkr!c}Th|E%Pi~PpK9;JmIWfPyyQzvSE}sUjUS~=Iu;aSsL$=UTZTWA{)iaA767=(oxv4Esw1Za~0q6$%YRd((Z@Q`qb0;)$4{(+r* zvQ}LXu9H^*RYLyqHjejLoZQVrMd$f6zATZf$4mzZZy--1D#?5XAwyauwtT|5<)z72 zC)ap2KcE~jin(Co5+e&x^I+K!gPzTi_-jdnl6nS=0lxGAW?2SKRqA%+jp^vEU7$SaS%o21 z7RV)AA|O*q!~jH1P;Ro9M-$U+0rp#3#ZLsaKP}KLr^xqBc9IFRF7mEzc10tE>gbUcvRB2Ju2|H{8a#)c*Z1H;a*~af1~d0ARHJzj_30|G!5d`Oo@A z?YmMx&*&%?yO~~S$kjn28NitBG~|8-2phi#d*3_z!jo1?^r`Vuag7xpg1J_V&#EEX z>w9>(-zc}|`+9z&kJIn_y4Zog>-#!-SN&)|((n7ddeEou|NVCQ{61Mr-`o3reBFr; z_wW1qJW>C?pKhdsJ1O*``{o}%EVGAuXxYN6K^ix)9M5^$ZTE45c!pdxY*x z5JE6Y67)m_c?uxMr;ue?r{4hj^E*71KMkAfcWO*^?_x15+Uv2Nlnda(0un0`4 zu=?O0AY@ax->q!Ic__`(OqbscecaVni&ewT1owo$8F$9-s|X{yWbaqus<_#)d|NxW z98f-^njjLAL$o`bjycEUsX=v#2oM_crl#;}%exxjFKZRcu6QT&i&{{zsp5!R=4_jkCX?1uu*40_u2`e_eMSWmO+;cU5JeM+VTS4pvauiF0r0YS3ve5KxL7)=XGecjQXAzLR?^&*p*H6;Vkce)K3$8-+VFaMgU#85 z{a01}Lo1bx&xb+)(I?-KFKgV12AuZCZqzBvKbNdaF~JL=c7R_OQLu%2%CMj-3wp5+ zp!}e_6XzzX(9V^!YUwAx$5WmyejZ$v7evaWBDyc+;lRGnu8VN{TcOR@Sv>pAv+{bX z5QCR<(`~?Ea;Clra;Pc1Lx#eenmU7qsp;>$QY|>)s894YRkr?B;i{-_L=&eI2Aify zfCV!Z8J$aOc`D?GQp=rA0?P{k;%$uM-oJ^UUv1gW40l@{lo4i&y{RJVp1Y0uQD^en zlat8uKFTW~hn5&sb+r4Mc7zpub(9nBlSu=02r{5vCP8X&pJ&F^U|Zpm)iZMg%lT4@ zoZkGE=Wn#V%)iX9_M*>Y;&xqmJnyPz)ohGKb<&|Ah{0q8sC5x3T;xQNsV_?bx-Ft^k8||1;9d{-s1mDEp2kqN`Zqa8KQH!dA4EnE(^cCMQ*Sp8LsK^TM z0V!r-c}AL#*mooGg$(oQyswpyzjlU@Z>Oa<7_TJ?_n-y_cJ);Tp#l=}CS%vn5N<|g z7#as5N*O6w?ym zvEBX#Z}A{4P+dyT3oEN4q{eYajpdn6uHf&m_NxYRyV!U@6S3|4Y9=;X3Qowv&FSu} zAjH6;Tr2F0J5VozMZBh&m#z}cS~3IPNqB^L+eZOjG(GJ?4{iYv2~M0GyuzWd&)Eix z;6L(6K&z?(3&nn)gTbxBxvUcx=%}I}T1{f?dhHJrg%a9@+pD8SboZr$3R=4u06l`* zbXMI&Hv$;v7-(?Jp66U!Yz1;AdO`)52xGHGY{RbLYO4O8ULj2g3~cTBFsF&8Nc8=k ziH@oBI_?$&xij2@e-TisnKDlhTmt%ldlK%CP5^UW2Hm^;Z7E*DYDP^JR!2vW`i%;R z^I8{;AEho@3nY!S!>(!+)aVjv1WZHGQgsb)Vvbe>4Zq0CiTk)61RstVN;P;BfEa#> zZ}T=kura17(>Xdhyp(|JM+grPgH7Q-1NR7c#fg@yv=$}5bP6FlQ#0GCX>$!bT zVW8C}8=J7a8aniNiC{yK4Hbl{=^2qVGuKi_Y5l|v;1cgj6uyoAv%aFbCL9`{u$Fz$ z34K@`+V(}Dw<5@y5l&Kl=>|gH`i{+pvn@$|nsg1x4?C(Y@mw@eJnm1yzwtc}_hKZ# z&a(^kPyi_8!hKnbJp)K#g|*d)ix3vxsjCKjxRw2OizAy+*Kjpmi1ToLv$Eh#;{qQr z=3jB_q*w)E+g9uU-sUsoA-f-(Hq|-_K2EdBgQf%y8{8Kk6AVEl;Drp)Y7+D ztBY6t&emlNvi)1M7v{DT;}2$r;x4?l0zaw=?Q`pOZ3g9oxyxIrr&5 z?>$D1UJu=?X4U-WlFikf*Tc?}FW8^X=;-0ZNZs2%&_}#g+~|{6fF9m~ibMd7u#aqE zW1RWCCbnX#+up#vdSsTW1Zr9#k;#po)U&1yTV#Im$hk`5zSzIRXY%ZA0p`8hWg}H< zclnwn!&pjfc4J>X4WyNn+_klnB!=uW$z{n(CH`uPzfcMAxQN=+@y`a}-glG528Kr9 z^(UiR2SlD3Yv&BuYLp$JJY*Kw5t}} zDd*fp{alGa?cmP-)ics9 zuO8g?>5_Wz{U;RZ>2^OdRBn!54iscJ6sj9{&z9QmB-Gbxd`H!d87zb}g>E42_g=;z z9{p?shufOh-~q(M;hZ#p;oK^?Ph8gS@l(sQNXCJO3N#mZqWp0&#r|HOPM`)ftf?mzdwA;p zW{)j<%j8_22gsq;7R}jlP67-tx{_-)bd&SW_81t2m3Q?208 zuCz6eYU!r3y$vt6-d51jYD%<}D1ArFOw$Vs=c)tjQGN4M<_O@n*Qg>^43A&Aot| zVT^+BHUERG2{Syt0(e=W_O?i-? zI4@s|;O%eV#hDX<+18&JBHtfE#5?ys-k%saE@`-rxOO9$0ai-R^ll49FZcV4O^ zjYgnW-#mg5LtA@2fcWu6)^zd*{FlYsOLNYhr z+&kwO-bp0xDL?#%CSA{fbfu#EouyV*wux$W$&)Fc|a@2@%&@aUNg1zIVA;H>N zFU^gL#g3oM73m3sh1`iqMIQPf?vkPejo-LUn8{GwGc+~r;~&YLCm3NJ1!>B1i+YCzD!N=EosCJ0rfGNF-5Lp-6^ zlR;W1rq~zGJqZ=j7C2nk>mLt>&K9YaVBNX$%r^zPudF(Rkx$TA>*?w*^f?Z`U53mY z9Vzs0rK#t`Mo4}4Hk0Dqt<)$;F@3OwkxN@`3?}YLn?uJ(#awV?jNZPkbc`M@uh=Q) zTnb%$+?`kz4k&+=kG|@$C?j4^cslATKFN&&e~HS3sntEsj_veDrp8r&BU|TQqVF<9 zd9i$b;G$w?5`|z>?$FP{`mP?XVuL7Lx_5s zT#jG6_KEKV%I-zZwZOk%36hY6(6WVGy6|pN{D4#ku988da$%-fRW7OAWGY@Ms_++q z{qc^#d374)Tz#QQlo?b($xsU>+44Ko-=NGz%g>~p`|GWN*MvaHX`Vqlq#Pd5c)Mn2 za?zRodTa^mJrX|HGLFsPhL6f}6l8Wl7NL6{WX=-Ea>?upo=*TY34p@&v&ubKG}Ddt z8_I=HCoMz*rmi&Q4tPvE;y18fA1QMGftM(0TF9OIkep%fjl1DDtU@J8;Z<-y5`N?O zHTNM#X_RL)>7lfqImT0uhnocVxq?Iu+C;=9tuibUBvhj~?bNB)9dK-%FAH67Q|yC} z3=&cWJh-rQ`N=tP&-aO1hM6A@LmgFX!n?qYf}J;GpoPOxNcY#=$@OrCWreg5+Xn30*&nI07@9eg~?%RTalH$f{<|of6s- z;YcIa90AJF{KOyjIcBB{A^vnpU^YDGoQJDjsC-r&JXX{T4thC{MQ9qez%_uTK53V3 z&FSRBGU*6`=rycXcn-~G=y;zdT6g}4V=Xhm3c}RM%#&lW5%kg+8A_Rs7BW)tU`C)Ak z0zDu=h^uyrA29jvSm*=#y2|abnnlKHtX>Ohd)6fgx6_L(8?jx_;~M1m*6d;Zg&~zG zx*Wk-1oBZsVk zuj~UVMnbd!sLIH&*J`}y5I8WiXHZ)y=1g8RKgtx<1|ZpOwA!RUv=Unrs(X>^U(Y;q zS^3uRQ1Gv%weosrW|jpl&k@-lHC{9ywF*0o#T_C;bDXxYz=)w5PWFhxjF)t@qG$4T6tn&ZMP5;-DWeV~nD0>vk9JA+InsT%~F3IbS#6|uRG^%k%C6K#^JSq-6{^0upy`mq2e+9_sfgdOFbP$ceyo-f0yV5Ls;% zwc2dP0BlQd)4<>T0fiCrc*UalZE@ifNxxfMds0LhrV(}G6Sd%x#blbW!)E{XA+KsF zBtVP~^IE$F`Vz6BZ|@QH^G|{S*Gk@Zg5#`Tj0)x00lh*a%PifHHDpbRefim?ejUe? z3kpL48t&r#n`p3}bvtlZjM_U%$jCEkE@=MC*%TWt%D^dJcGtsi7nQglvCns3-lZT3AwRK zCR3$;JnGN`?(g`LSvV2kztv&M4K(h%zfCED9t03eg63E0m7jONe$xvh&^U z8Hs-XG&o4BX!3|1Sxr7#y2fnX3=&r_p3eLT3J72dX1agu1;XyxP5cAGL1+3(4p@+i z(Cnpw*#|C1O#sIRN2jAA7X%=01SYn50B{Jqt33NQds*Z%RBKE-Lje{BBF8X-1SqH_ z5X;?UziZK2j|yMWrDd3NDVFG}xq!&LSH)G#X*o*{LFi--0Z#v%^blMJOEn;%a`zDK zgK1gc2osBtC*qHXU=453eF|>+d^!jr3J(q)4qRV8$sbXLW&Q>u(4=&r$qzINDqwX& zL4PwXY}4>0Wz}iSRJ;+QIB#d%iJfhS5|UQ#r)J%Kvw>Wc;WU)2k|4FGd>L%`rhN>XLo_H^ zAetQIkVWF0bo0p+agMVtRmfnqX7fn++a4v@_RJ**{O7d<5ZDJGfpQ!cjyiA*2N_ud zlamiWH4eB3He>Q~0=vP;t9gmBK~GNyB8xK}-5ihrje(sJc9A$Nope^5o#u)ZAW_y$~4wQ^ALej(Dy}Tm1i5xD@I3du3?I zAI@%^3%5Z*T9ERO%j*D>b98Vj$C9asHsS&zmyMH_WtlmJ&dI?!{m=2@h2bn|rpv2| z(qe;_-R}+0qkH4*OvyfT2toemVfo`3ATsjNw?+uET^#j)+BvTD{*0sj=5j@hr9!6B z>PW8Sjl3VGO@XsyJ0=4%P+klCay@yaW5YPe*QVowXiS|rHR5vk*wwt~YAX*XAJ)#0 zIqD7|WUnHI*D4xxWb{#=B0KSLaQ6=c{P5T2N-O)2u0?AvkfB2@k0VUT)DMz9E98-Z zypsK&l5(BAf4lQU9uH`+@n2bTBc09nD=6|z>R?>npQgDrTU$yzoyzFQh7{lbX9>@J zQ8~=(*LR4?_&)+W`+o%XW39h-TVe>k57h4&9zsRz&rU2RyGSGfu%|o;xZ(kYj3ko* zKYaD$i8OBN=26T^0Fyz4e^q1~tv&0}nz+5+PA-qDSN~mIKU^D%_%^y%s7U($8&x}R>+zaDF4HZtd8KHf{87uUHwjm0TXQzTWy4QZ_1#l%$O z-p0gytP`21Hce2JdlmEeE{cOUn^rVEZ!5RMYmR=i3_cB2cW zwO>F6!$-<|!XS1P{5-D+mO70lH=$P}06tK(*w=alCP%s>VR*&|$xh1k^?YR;G$N9D5c6e@QqVb)%2EU^XGxj&+E6dp3QLjCDvanbO(Rq zX4E>)gr}9Ct{kh0R*ep_*9U^`BGKeUJ0;QwyhAJjzJz|Sm@;3vFaQcG%~y^Th` zcGp`NXs)6c=4*Fn9cbBh4nH`5(7^DBchzP`FU$;){9#)zbIu&!`K;eAxBvAYUZbXI zeeC}9_;|ZE_I`RiSoXQCY-eXz`?sAIKx_!q??+gvasIrb{tSNV?21pY5S# z+1~?q9hH%rK(|2hnlFRi#t%DW`c+mF(zb%EL|htO6}d*boc~VuC-1Mx;zVa)zQ|Wi5iMS3d-;GR7dkL$41~73xhOI%+dLE0!)Smtay!P zdTrTLVJp9PKXyNA5B_koSn^i8ODa5s@MA;8__>ir_XDX+A4i`K|8;c7bC>?4unzN* zN;w{NR*qck!j8bh!tf?#LApX0tTPc}DP!k_BA4|ENvr)Rsb63F9Le8oS|1StEMaUu zZpa-Q((2LW>#J=4_Iyj7>FsWK_ZxD|k_z0~R^8s?!K`v0jZp^0@blJ-7D4Pf*_R@< zyrQuCCjXFor`0Q~d&<;4zuj%fZQNYE^@R`eC_e^!zx~YPdqVl}@cl9mzJ`<#4iwsAlk!E5 z9ML4&=9cgl5?!-%#SD5kOG;e)?v}p`ee`y3DRU9p)vyB?yOcTDMbTWXoXVVFtxaz+$+b0Kn@IVQ}h ztE7tcV4W!@IJB4$c6=3mFmXK-qdBu$w&y92s*Lhg2~+(tPB= z9zkw{ZRC!Xt*8>X>KITZMgoYJh8;QeJoSIrBnIp0@z7&ze>3kyei&*jTynFq-_`H61 z^?MmyE`O%~lKxnH$lu(Bzp;n=AP;{Dk5|8`i(8$xA3F_ydA+S$Zk&(3Uiz$7HQ)X< z$j=~8LvYDIvbS*T!e%D^DI7^%v6b1h`eb}vZTH@;YEJJqFUbcd&m@Vw?4_R0toP_& zKs_&%_X>b}tbo|UIzx8$=ei6xj`p|&x0YP{-lxbks2gub&U(rXUM0vC^U3bO^FYEt z6~5N5;cXnCh1|M7j3jaJE{TbTXUEsiLch_v!20BmKbDHTxr%;`4JTwar@tBk9&d4c zM~%^>b&hV8Hg&2x%&X0)h(S>J0?KS__QeUp%wc5IDlP(b;KD6q&%L7!(n{0pXI4ee zQ8sI+dKuW@>o9S@;=&HXE5hz+lGEJfPRcrt&!F^fZu*Q=K@Y}~VQ>f>uqhwaO&q@{BI7JH-4~#ld5mHmy&KWcoXrQ7A4@VCv z1vS_JD&RDI#*)#X04W(!G6OA8I@LM2)kZ*G`xck@6K#9(Me%~kT@iG3h9_-PN*v3$ zel}x?i%@ABA5jZ#N|~BAYLdn%QS;A-rpWxP$4w2BpCA@u6!Vr9+-cs#wPnYX1mQqI zKl>8x?F>zhDz!7<@ekY~xr)~%kfD8fr$5Pn>)8qX#_V4pF%$Hl>Ai(R`GpU!V; zh1oOwZNj#I>J9y_?}-cPr-uj{*>;M%b+M28wh^%#{m8GT)IqY~R=tGb$ED_Vi@R!% z`jt|O=E9ACqQmC%A8TfBL$}NQj<~{qc5vyj**( z^9#KF-ap5lnzO5io~q&P<+P8hIzJsAX7@QwA&1^+0xufWv>M^D4b~q+7NtsG`slbM zm4mgAT=`n-D|?eVM|w2wWFZ;VdW5&WQs|r#dyT{8`eJuD%8Q}aUqay=fRT#qqi4m|z6=v(u&E>lKy08CW{3 zs!)#$)IYI3Wg~I0ChC+Z^XFJEvwKfQlr$t-I%Q*U#FggsP{+DQ$UTV&qcA3&LK*}`u-A-Xl*Ke3TX*Ht2j=R=l-ahSbdE)eI<{}R_~bnL z#127HUjO`&4(@7!QSanc)G>qx*GPJnp`0yx+7>HDMu+2-MSH4hoiIA|=iuLlc&S#9 zx`MRcxghP^C^@EUu2xAhKP~`T^~ga;fz7Q9EnnpbdFv6FtizklT-N7hL%)X{W-Zl9 z!IVMxz!ayDKq#inL#)!@K(fJ%7GY>EkE=iy(fkS`&Z7vi+ z6sdlB0;E;Ii>-Yrx3?#NRbyRSG7M$<#@zl522H=t#wNT?mf%5tDmwYowc}z~LJ<=0 zGNj}=TMZX;m(Y_k3BGyN_|AvhnIL^4_Inw;-7O0y9{5`ymy@v&ETVKARpPt|gBP?@ zxd19x`YMAo#FR*O@2S$bsv>KBJM~&JnXEn(6*(AWCKxXap>^h1k_nNU@Zu>Lm80XW zt!5*l0TP32q?s5?mthM?%d+{fOFF~pHIr-LIfe9U0M#I5IKV|#Mbx?%Mbt7b&}9i# zeF*{+Jo^Qpb9GP>JkGc>6rqE}!!y0JM6~*{m3`%>G3anY+Qsv{s zYiDxuXQHuD)U<*N2~gHVhJKNfNRU49>EjDa4kEvuCzfelem}W;S%TU1#de8VoJD5i zi~&E^A+#>_4R(FKqM;M@ZzR{ z`in?q1&>;eN|L(-+fq(zFsTH16@3QCoFG4;%SQ0(pd5$Z_?&`h%4CEIsGRsq1+`Pr zwp#$za+Z?h_X2K82TKlIF|J@hf!arI4#6Y_1QigJV&o2mx}}L4&pHk`c{?gd??Z=M zZ`kwB$EoV`DT>fo8j08fq0545VvBt*dtc$)kl9KLB|lj05jru=U4}9Av^Ewr6b^}; z5sSbs#O_%rdH|TfX!7|UVr60aPCw3MzP*^f?PD3EBv0vEqjqmVqcW?SKoA zYDA;Rc86Yc9feU89b!k{%5qg|F%H-u-3oDnsUO7);|`r*hwo+X@h?A+*2iEo@x^!a|4VIXa-8K5_zm}_rUCrFh)T}?UT|`y<4HOl z$8NqT|5hzefLgoYc?t`+9=c_y2iv_vig8`x;yPo&Vm*|2!Yd`+wfwPtyCp z->2XBe|}%U%m2JTwd;Qm_kDU`g_l29^0MFMD?gOk=iOV{d$-&bwDZ27j`{~SD z|Av=bw4v{uDd&gGHg~-7kf~i|*G8moz55i89C;^=t@&o&KSfTnKwwWADoj=)o2eO= zUDlST5u!tm=|9vz>z5io0J~YcJzM98H;N_S1||tcV5GoV9mgfSug`oDJSWzod}zky zu0hsMIk5gxFfmO2bF=YG;blz zA$!HNCjJOWQoH}LgkgPpeEVio{?I@}TY_!AmQ1`ma_gMQ%*(`Sfcjkci z?yA$}_^-+hr@>zE~P{msl<#Ake=F!44E+|`!5*iyqnkjF5cXTGNb8@}4}S=q5w($iPd z4AS~Kb-Cm9NnX7yHqqVsyv9S$Ia!HHcU#*We}`Z66ga+TN(rJU_v6Qs2}*93o93|8 zc63gsU@qysr&XF?%QSiR&Ch6bJjmZD%(civ#H)n`cIRkp6#75-Wu&@1@4k3^a|egb zOLA8WHHo?Ga+eO&(S6;r7|zTmIs>CGQt0W#WMlrABU$oF+o?t@&)7TXg*)k0^94KR zJKH6+)~Zg!G~DF}nUTb!@vznV>qdQ=YH|nRhG&F>)N7RoqOu$Kx;`!$A#>XaIAx~i zWsQ^>ou$Vgv`Y0>onROuP=Hr>v~TFE0ABYq0V;vZi4+io)6BYmNjdrR<0^Rmv#v$nvc+b2CO z!dr1qz@VE*tHNJ8^V0op;#_O-mbX4=c$V*zdXqjZAZBJgz6&Zo7}n#boV8pPgINR! z6oXxMyE$XoUk7#e1z$FIp1*VQpSIl3ouwjsfWd33_icE|#Q?1ecz}9d z3tpKOPxP&Ctl-|~ZD%}AFK1=qa+Z~m?%LUn3^sdsU6kP|o$u`=*YHzGJ#pe%s~Phd z|N6A+KO(0*IL;Mnc_s9|(KUxn{*yr`j}zVf$^#x78BF3EF@(6yBv{OsH zo)DifjT?EFmLR_f&s({O29A(^^drtiEv>r`Y@Sx>V~$l=CLU;NpuChj%Y-S9r)_wD zoJqbq*>=Go&%7?lYMgil%=x@Ena`=L*=Pz>2?N=C)pMhkwi^t4ukTWD6)U>yH4 zd9%WprtX82GBc#teUsULZZBpsi=Yt+?FW%5Ii^-xCY+()Jg#1tx~pH@5~qDdEQ{yxfAs@wlO&cWlv{*ik>3`C9pjNw@%` zC5}L`ok>GLew3AoH4G$;AwpmYN-z*^kl^xEEfFmGXIriQ0yQN$>oMQvDJbZ2X1ioC z@fHLTuOI24yZscdE$2PjB_}-`CqdHyd$@Bb-%{%+K%~BF|;1 zlbpn#G_jB^RSW@Rn#UEL>IqpxYL?ou10R{iJ3>%zEy3am#Fv!sbzKcUy77s*KQxtw zrpb$Nf%KOTM)1H;x49Az9hPN%hcsNXKZ?h{2PKZB4kz&`cE$7*3sG|xyB6nnSIi6F zn`kupUMbE|)Jh=TTqNN^eBj>Ct7QYt+9+03V5ZZGp!P)oMWV-pMnXSE7@mP8}Ryw}fvVgoSUO#vWqloNaA8<7ZLBsGgYk@I=k?n(G5 zVpHwF1~xStxyDAWjKF8>pKQ4> zE}CVPL=TM_i4g+zM_mSte{Xr1_g7b52lB0gK({6l6smDoKJpU7djagio^>>QB!%^{CT1X_1JLZQAMbYvIvjF+bU6xnHE|9_NkokHe&pgbOeOAcIQRF7tN?r;Fl@mZI%o&8|alyu`CP%GocHUWUN(OR0Yodf_;0b!p4$x1{R#XJ%EI6OLg zj%TRmM=-Kz4kf4!=JhbN1B?DnSkrx^;^}?}av29?rE5(J0p}{H3kG{IHV)y1qKXsg zL!}ZL10hSwA5XK!Yde$staIu1YFthj1&`A^OVTGrE*rv9c1BP=P5|CzV8?w5any`L zQK^i~b9_bYy?aYUTub_92*sa_x+HP?Utd8kejv|d-Se!ce?O-B8gXPz%a(9W6s{1c zA2zf7-~cIj#Au>6T@pn9#Yu$Zr+JJTezvSVJGQ;^cF}sQSB8la&%xhY79xy~@^l^} z15Q7%AU0Ws$Mujbryn)JYn#Mtd=l>{I}r?gf$l^@OWUsBfq?;!z@*#~@m5|Iinx<5 zUy+Wt(+qkJds`_qQ1IT_zB0VDBU^cnjQmj9^ z5taz7Jl-CVzoW|x2V*z+F?*mo@Py}|AKy}Wx`)M{xc=*oEF$ET7~6ed#ItxWIy5#p zGgQuLkr78Fr{i5Au1x@aJ#&rnK?5o`=UVsH-4fYpRG1idai8+iYS~LIQsKvo#{cfug{)ENT2?8M@ju@!@|V2 z)U`;U`Tm9eGocjla>RYxGg9l(v7d#XrZOFK2;TuzPhs&+%JVQ`$mi5nLb0HyUQ%>^ z?)LjV7)4h$F{{+-e);sZUa0nQ^d(M4%p%&rNe}5_NRjEGR`kC9V~PxRO`$qzt85WY zmpR-Ii+rK?kjB>Cr^b9!kF>D;MpA$srAMbp_#+R5MCdNKG-e+vAL6GdFD+B!8J|ZV zPqN~N;QArD7d+y#15~@ViI>97#|`Yt8{hCibq^C?-~~(erd7MQTTwOb1EY+e$}#sT z9W?TV-JRyEw2eE71ay!esMRVI5c<%)$EXhjK)Sp^lHO=Bi#2dPUGg>(w2UK8E(WDQtM^& zAX`UNiC5J<|1#O7RkKF+nVC9eidts&PJdxVu|DfN&j8X?b3rCNC;^mQIyZo#A!653 zV3*H~etp&UE6t~Wi@=bHV7;Wm3g`@0;A|7L8mU0cwZ7!7qqIoS^-Wi3TLWJ?j)4#0 zr;XTQe|>r4OlU*~tAz*Hgzz!YEz z9ZH2Lz~iNhh3&OI4`dTPDDYBSIkbQcrMN0xIl2kZxjAB>y>E^2kNht#iAG|$iaFy+ zBC3$S?XPq^g!o(JZ$SR*m3R2pD>g_!DI;olKc%`oI6p63l*aaLjOVcsLml6Wp;m#J z{^rfCu^CrWo)WQPC~kbQp^nvWj0N>!JiPv=B9n-V$+89Y=)7UvY4J8Y8~~x?z7{2n zk~!jGAKBsp@R~n+H{`7SI($MqZ(og|sB+K1e%p_9rLn8l?U0s?qQ;l@PluZ6@RSJt z{!OQ?cd)A%8KJxIude>fZ^V8%LwJ`7fpGvX8usO)TG&$a|0YK5bpg-D9X|n_qi={I37ozPtbTS31A%&r>-5TlURwU-$ENuPxx;8)h1Ruyg;x z0*!9J18un7QMh>VwOlF`FI0E$O@CN0?k0TlH9lWk&4S$-%mPC;t4e|5AM3F^FI-w*v@+jEKQoO@c}GmyD^G*xWF6TiGtvAVT2~X-6PwAW zd^0V6`;Ym1;*8x;ZYLGJ3zoBZ$gXDGP^=zcX`{A>S0LLca(MIbz)rsy;({BhWnm!DuJa}YJC}QWz{*x1lfw`Mo@S|} zbG1Lf-K0-V%Z_6dhP}c7bs#?R;#Wglkn+`lD+=fXAi)|U9)x4gc4Bsf&xB4Yd_ohR!K$yWu8-o$ z0<7~+skf>n)#|Q66}PWI``#VheEqhr(^r#Ip9l3T3ZF{baudLe51Ki=C-ZGv2 z8Eo;}MlcpX1|W5C&L0&U2Nc(9VzCiZ6*@RNftB8c0k-R^Ypc83ZWqnyH=w#y^a;}5 z`xz|os1j}v&zFHOC3d za;xz2eQ!7A(Db_YhF(lrPMCjdc~IU&JnqjUz1chFD}CR?ANPlyPuD#<0{Ny>mEJG) zzg8EYKbhLv|> zWpcVI2$6cnVXU?by`_KJ7(KagcRQa6Jm0zghW1+qbSB;Fy$g6o?30iMgNJ=Qvy|~{ zR;Pf2kfihtu|M03NFsXe)55xY=bVYjiHsO9dvhG)Ea`WJ&(^G21(LX{#MZaRoK2SW zkoo3X;%#DFl>Q~d?6}~3%eV-AjZWC5cxiqyN+DE(c+B6`7fHiYDS-MU^~>~g zm>2fLPwumBGG>c8~ot8X`J-oYHX#(o>)>xxJSKS&2+sD4T>~R9MYHHRQH%2Mh+SPnLaW$u2({u3j zYfI+_9Vv6j69{?Pl#5)G2uxX_JU=ZJz7*GTIY48cIhs*Q^E1==_{1~fHxEtSoO$sQ zs1u~2R&;jJ4Br@vrdq=L6X`u$Ev`eeykmsj2zuFOOA{@()l$UZ{f*5zPY53edeZLC zLBEHSs|90qH7PW_v5V~vq4!UJ30+}ySS}e$6f?FZ3I1GYVpRq9?{1OMt2Upj%ld0_ z-;TDwmjo1@URc>A4-eE6P85^l=DGHIjr{zO_Kr5)>{@qx%c}T^3O*ETuAaMY#PPPP zOi9$dmF))}o}$jgsi}VF(!$}P)By`;>`Sj<60W!;5GcrANM@~hYF^RAFdN`}lEzlH zpkNcdYY%)OxQ2$dX_r{A)RV<*RBzPs;>=5)IMESQH#JmmNg!=g+YnQoghFP|fN1~~ z8VVVWUNoJwup$8|YT~XB`;$sSpF3w+dKT%lYMC@y+kG-Hn5Bdi*)DQ4n~*`5?wv1Z zier#C?{~+sk?Ad=_+ct{WuN#H*KLqCbXNKJ6Zt630$!DF5U@1EPVJwSXg9N~*X)V> z`ZC;$Nm`eku=vr`g8%aw9{2=1S6a8wAi7-(=Ky(~N4t@Na_}!r2Jz+(IiB?jw~8V; zj`tAGL}X?aDJgvV43y_JZU0VCPOFPQxmv&Gq-@LJtLCUSo~vPx4iT-+(R<)mRVa3w zs`*&b$IRd^s3$5=T@I}s12Rx5P(6=Bc@(9fb0nvumwRDDWOt9)u#jOdHMxMvs`cy5 zGl<=(anQ3?&oK0j%v=R9%G0#OA)HgR2|?|&M0bV!h~OHK#T!|+QIN6$ckqb?m#=W) zyK*pgSU$Wv$OnPrbr3Uo3`;-fFzmV2(}I-d6D-&P?=uWZtO2rPtKbH>5u9e?sU9-k+5Ywj!o31U4Yc;)%{~GIzcwdZdIIdpyL=DY_m(?jUb5Q zO@UU_qhwH855$v}Z+z8dqUq5IN!~!XjuLAzBR-(S3X=5RfswX>^t5eVxtLOpZb;_<7@aY{5J(cePO@G8$pv@x&|(&|XS%NnQ}3 z>ng>dv^Ai>S=wAt5`?uGLF|+m`0C(epQ#^9h0ONmjQ-ZR$5Q73Z^qMY8df||71)<@2*u= zusF{RD{DAN;*H!@;bCehxF^LO)Q|NVv11~kqA`%0B@Z;cXSUn~m?$m%MJiJCV2vN` zD;^b~bJoky`F8hZynQm6ukJ)=TEdafC`dpb?$F4k>FbIg>!CMJ&8ERhZ!=kwWS>YuebUZ&WD54O-A?1aW$MEiCJgzE)30mvTVpxnt+3Un z))vZVFy|rF-UZ4KX1mH0O&gdcp+Eb`%A=#4sc$_12mXl9RZ9J721>M(8*`R6^cJ`G z-ouIe_D{~2IurU*nKmg0gU}L{g@d&DE1vMR#+9A1TT0Lgd{>t9>tciUvV>Pawuw#- zzCpHbez|6q?F|)TQEC-cvn#E1AEI|ey}6ZE8DZulD%Occ27m}ryJn*PI6hH(Y-7)& zVhWSUX0J*ry9+JX2nU-z;P{)i0@w2-6ATxbd`p?5*XEkc0U1|6VCmZ~_vpU$GBKb+ zSb-Ou5y<}sFfl!=3v~~;#%KDRyLsgm%&tZ#=Z{g5o^xkmk1}KV5^i7d@pnnk{eIw2)~l2IawHMbLwy^s~=pLE+Czu?0S)0`D@;xQz1%?~-9E-jb} zhb_1(qPqC(P>@h9#vF{=bV1`d<01!~=iW#kiw`xXU3HXxa5)s{6YaOD(Dxap$*dpv zkO@ZsK!CZRGgX`byB%lh!r5#ZEMP#br7n8guMU-T0LtDnWJY!Od#MQg+vmFSF&-=% zpOzT%)lyUFx}~I^WRUXhPKr!|D@f}mV<3LBAZA`P^5P)Vv94Gf^#~zJG+7KeKyrqy zT$^;8RXsAPH2U_JuEzbWN(?ccx<|h_gW;`uqJdbgObQ@(b-p66ChJ*cY51-({CBZy z$1!a=YZaq{5dTq7%KiLCLDDT`G=vc-r2FXzHUOQlfJ1iBjFIn+KZ!C@!UJP-2H>vH zfgU5HeZU3U_JS(z_l1O&+ynLcNJE%`JHwEdbt7uLw2W8dJxg~b{y){IbUc-T*xGWo{-#ns5 zcYJh$kPI2k6h@GiJB?D$v}k&61U8_MClcBQLx@VI@%&L2>qv*KoSMHto@pzdIS4@> zr3Lm6${;9mNZk7oCGwTt<`Pi#!QC^BDGD4IQSE~URe`QuTfN}T+$5AXw;(W$+K45V zJI7Wgt`E6lESEqL_i|c10%I85>z1{7g)88 zh=8*Kxw$*?!u@a52xz9OJP*(sinfwe7y+MERMJ1t=_=@6K$yy#p!4qT1m{$&Coi@m zRL#=SC6~d5H}rK)D7H3u8-(4RWUoq4SA6C5A5532H23mE&5K!p-!D8FfaF7W1t88H zZ)Xt_;y}ckqF4`04`SDt@HkISigf<=CcrBy(QI?kG*ir{Uy9`(0=Th$GOeUr4{X%w zquqMCQ01%;WO#tj(5tx0Cu}efR(TJO)Vjzg82LJSFDzQq5bgx;5myB&0`)Y5GOw1_ zFq5`GFMkllEo9fkbPHR}3K4dJ<`YG)q-L3Kyww{cNOV+_j%m|-vY8c_DZY`4v6@L_ z(lASz4`dMr+#P62kPUwnoKLC&1|0U0q`0+X_+)TC?_PtOZ?KF^ley zqG#jo1_~)7?OV@7=LiIN;6yZl9wVr9T=V1$_5zU5=7AW4MdFyD$OkbRFV3{7N$64S zgcanm;#}>9T}HJZb|VnML9PND>10`wt+XI4@D23L0r)ukiu-4EK32Ztp!CF+|Ck61nN}2 z!PXwL&kAaLRLe4U|F>-BUHmP^HCdn}O7?}so~)p!)Di;rC=^C%K#?s_S2CoUJg9e& z2UKW+qM=adogg1!+&PGecmNU_$S8Yd;KJo(?jFDhV4-WW$c{9a42u8Sw16wxu$v{A zw;ICcXiP*E$yM829C(mG(L_FTB8#f-f(Wvqm6^u_6B1q`roCi##hPbgi)kJkq$utl zKKokTs}z!d`egPK@_9jif-WEEU}63yhve~@{{_buHem=)!WzBFzO%6Kp2Nk95#?WU zLI*y3mVg7!3%)I3sqzB;QqUz*zjfFMMJp1;1s9-eMf9Xp`qGf>Se z2jq%I`ql|S>xvl<&<8F@Y#7Wq(d={*z*vX127QHaROAXQ10bQlZ_r3^P^2n5klEG0 z3S0hEEU$ekg)!{8SqrS{$I>zZ=T1ZK3zrWn0D~oqd^d)K%R|@@+SpGUCPji!6-zXR z9W#VJs#9qxW_GhdR^_?$$R@(=hY71am(6@>2hz7}{V=axIar_PWkoAtOgOJdMTm^j zM7SY3gF)MY%qfUZXf4+w=l(LIyIhAC)XUh7yMT1*dH@foFKxyH;pBxgrz1DgGJ23k ze9Xe!Pu6HU3hE+}{o&=wA{d3#;!-*^iZt(cGV7H0D#1l=!LWbR#Xs0hAA>2it61(;lXQ;&z$>Ab0C#Gy$ zewT3dY$h%4P0$hH6>}i;;+?sN@*511=)1^4dl!nM36S_9?pisk4of*>f!buud(=lFpmlXfWdVgdO%5 z!qpHp@Un2LTy_umHD1qY&r7~0)ZuVyF$qfvGNzZ8)|3u~3N(+);RQ=&s0*F#06AQ73lL8gboc^5Mx5kl;S86T{`nM# zeX~gBxoIGRYWdXV9Z`So;wVe`+(c86@xKfw1rS)xNSu(J)J!4vxXuOAmB9=TQZ(^# z5GSlgRL53hBaxA6MLXz!5~9&K&l0sw&n+PCi5b-!)s9j)Xg(U0*>oGShIQ?Tk1GNr z936FgdFVX!Na$|7k9R7TujQ!)$S5`n5{}q1;Rwi7to4-|vVo!gPWt4tJ^0txuIfZ( z5t;20+Jdj-E-mIQJo~_kxO8KN~`Nsej%gg-Ha{->mt@vP5olVar0Bd;U39r zp@TniQmv0NZ&28Np6%4N7wTOk0~pi(M^iebMpUFmcqpV5Czf)CZ@&jYsEz*0>u>%X z!-&(S3nRgk(yRh!WypPOcN;<$sBYUj~;IV1s!j*wjrazG;3rrG3#h z*#PEvty6iUTg{MUEs+sM1IYFJL>?c;o#IJgsK@O$YBdtdi;=?_*|0woY|Xkj2xuaV zqJPTz*$HzT4)c}sBb2e012r^y)#VU-xmw*fDVQDBy3 zR+E3l7^oitc;Ug4iaw^5Crfy11xC)nX1wVQ15OakIJF(NRcdUqDU2Fbr@GDF!bka= zLmQn`dxz4DF1oi@!F5Er|7?YKhUn4Zw^zb~8*7lQNz%S-unZZn%F?`c?EFO~s{Iqc zK3s8Y&RlyielM>iw`Y!6wB#wLO|0VD9;#pYoE4ke(`n113YA+?ZuHQwwJSl7t?V%; zaUDqv7d+&;WUg)DPIW@b-D>7=p4#HU<~@)8Rpc(-s@kNQzmq7mEl`7xSM7Rtxo)|u zUb6*D4B`Dkju=A#@4r)R?M`YUbUa!urnz^F{T&RjWi3lFxp)G?Sp@vE=%iJP8a~?v>KODB%dP0+ zM4r29T@0MrwcqR1)lKq|GSE#zn_W~+0vT+x;}Ml$)TaP7Fsr{2kqC- zWXJ8)m7zNby=YwXpA-e3znT{BK8f?BdZtzCHk3OgVR6FtJ8(7I+Vrt(&%Eop{`(n# z=5qIpFVKO?-_a{CISVlz#e4|)PR!Xz%eo<(7%fn(A4bhm2X$s#-Stmr&jL+#i%=&A zFt*at--nw%ze%%f~n=GJODF}Zug$8bC@so$)|$`qM5ZmQ;k6|d99=g5&8^M}|f<14fM1 z938DvNk#!ZE+Td#N$QQZz2nN#U`m!sL>jO7PZREu0M*pstIuzTMipbJ5ZY4Z*>YgW zvcIBz6s==u8!cj!th;J@U`8Lf^WrnuN)80(h5i-)^z~S7NPBwPgwJrc+)S<1L;80< zug{xzHgO0A4L#68X6el2u2mG9*rou7pRZ5>lFwKV2>LJr#*q;gUH*HpxGY!`IAf3p z%8l~EC@P?%q1*PiRc`TSmoJ}HCBuzB8wLF!W?I4QD#nxtFXSX;z3(e8Re8V0A{NT! zQ7#ie^Gvw^QzDyNNV!&^e|0fZ;UO1TwLn<3;cnp$Q8&H|5xVobhgz^H?0~Z^VmC}; z;G5uoW-aYS#NCX+fq?KCfPjAL2Y?g|9h{WS4ed-A8U8D5`P0{n!;a*=Q@d-7w8W-y08wyW&E<#0ZV`(?78M|_aldCgf+ZgUS1#1 zJGpE+e!AKe4E;sV`^>k)5B0~9y(`nXT-vK&x%9U5sViI86Zb=SJ)6|V+zaV~sRYHY z9rKbl=jWx5YzQ{E-7SmVM#JmY8SlC~F^&m9WLO@(k(Fkz3+@?_lh~B;_f<-2 zScfXMNu~N8y2Ss2&{P$7uEJ zFfFQ_L;DB8FFK3Av*Yz;&c8_wDOC-vV)>+XSQnyeJlZ3rzWK98nL?EpeU*8zr=8pn zQ)u39GRhl=&V@uP>OxgKgSL6!qxv5q6$Dyk)gV=`+Peq68jDNOcYje+34sYQr~kf&rMHbNxp^d#&{{Uj_-5`kCx zFB1C}o*+8#krL)A;8WG<(LxR`J?U(Jemzm6Rie}(q%|7n8vxnx#0tCcE&ezNJD0t` zabhr3V6~DdCWURWd!^HUimzXkV7g**20FNH3QQMPWaYnKS%$DRISEjJyczc}wHdT(klQCtPRjgn((DdIUtQsnTw=wE^)+g)hJntvN>Q{Zv4!O zCS%Wl@#d5b_h%Wgjef1eBi4CcVvT>;>+~_QPPpt)!)g#ry0G^)&zg-+T*n8XiHgDg}ZJmBj@kct^g$fR&Qy`j3i;0sJqkUy(*`msb_!NSZ z%HpQC2!;B2yNcagcAy8ZWGjM?-Zr?CU5AC6@lkBA<{){-`>3$Jt+F2AWvIm57Ty7XQPGk3>`x%{)_StsFE<1_v%n#XiM)>*?jUdwIoSz|4T z^4Pt3e8f*hFg(|Xl5sXgng>YpSUN44YY0)V zftn($PyqJ;S`DHt;;$k&eq)|=YKsc)EMKS;vbA>F8!2A|XZ-xNzhBb&Nj^$!Ei0p(MI3g}e@v*e%NYLZ-koO{z{ zNlz&3hV?Z@)7(1=J7eGI;7nG0!^!?B>=B5~D*M0vy4o0a@0WlYu;F|6d$`S*U~R;F zCz}3j;Gbz1Rg7{xV83j)Gp3*IZl|<`6K{d_GMU4agLoBxMo2RDH7~f#S`Cg}a;zCt zNmEf=CJ;1={arthfk9BB*%R2O?yFym#E`6S4s}M;4n;qhPv4aR5&X?aPbkh*Si%GB zK7_ECl4-R+HH>RGfibf;DWzwK?{8Qb#=H!@98Eo~aqNOsTV3r_5Fe&;j-PA|Z2zH&`VUk+tYc=@=9=HRF zVt@y5I4}r(cbFH4k;ecYP3z7!TO|<uh* z`{Tq=?OE;A`-beN)BR6l;n~*GQ^}j7XT5uDrmK`|a*fl%Fu@Z3gKRRt%j)c;Kq$QT z`q&}Y(yN!{0(;B3j-?0xn;}EC`UvwPVz-+ZRrEL9S8K&`1@EPURNYx)v^}BPIU0|a z>Zunm`SyG(n+EW&*+i_HT4T!j0wxLACRs#J@_3I=Y>ZrMwp39Nxj2eP1Kb%yYQtP#Ahw%`?;mHzhx12

AF#)Fa%zzGC%eYbOG%KMYmT?axR_ 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 literal 34975 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

    voKxTzsaD^?f%Ub-g*YKYbe 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 CYuSGQ diff --git a/mechanic/Bottom.FCStd1 b/mechanic/Bottom.FCStd1 index 3624760f2cae6c7867e2c9ccc178bc1638dbe6b9..45eba0df0b0b40464d6a1f15b1e72293c50a9f3b 100644 GIT binary patch literal 108602 zcmY(qW0NLa7p!>~x@_CFZQHhO+qT(d+qUg4+qON=d(K2m%$F4_a_t{*WkzlVX%J8p z00001@C@hB780rEB_Ra>mQR2HF#o9{_QtNZrgkoL9=0~uy1LGrt&6?4b@P|mJKbsT z-}{bUqYa17Ov(T3{+cZAm{>%%u1^+*6(+rXeKZk3MCGHQP$PF?C1{*&lg7 z-eba}%^kG-_zm{NfWupIVdLlJeE<3Wyu-V}_;Yx>zs(?r2lnd7i=$~+xl@qp6DO$_u8-;D!1e}wtr z%bSstU*~PJ1RmzVnqDH%oz}-)&$7ITJI2qMhs-DTi!nPhxGg;ApDK`9YNefGxePb5 zcfusimal&pMZZVZ9O%4Hvrq3KBpuq*X3zwLwqxei4@iS*e)noJ`1*C+N)Hmij@9YE zVF&in?|YY|NxJK-vbwYlXFwFd&eX@V{%XAPVSP}3)oJ^)lKyPoM=yNqI-tuP>Gl2e z=#N=q@w56axexI8!Vg~Zc`dZi`(LN6?AG&LoK#%rZD<`n`=iGWp6eu0U#1`XFkzA` z3>kCblkD@z^oAaeT8o%Jo)2}=y@godEAZ{RyzzdJXN4Y85LBLqe7OQQeM^~tx-PBv zhF|{`0h(R91xa|2p=StHIRkCy!cdGYR;};?Mwebx5(?^tUjmS>Ny{C)F#i1HS@6J> zovG-JF(ODwAUI`GCVUzI<7lcCAh7^ysA@`immYCuv^7)Rysnf(rWWP%cJ$JAbO<*1 zX$u*N``2D=4tE~nL3VrjTc7&5Uu<^yR&IU0aV)Y+lPHz}O-b*(G>_>MA<|VFxjts6~i_ z$7M&gUd5i9M$}KQOgauo7n%ma-WwUk94ZT~C&2Z4bAKaFSe?I}w_*Kjy7s5?^zF$8 zQj$?n2mRiyuW9{>+QyTJ{UycVVv{wgho^Qm9&Wy#NpI;a2)+5ettURAsU&yu?01EX z{xLu`Mm0W>GX?mD68=QBG?FCS{q0TMgp;NmGE*eSwEm;k!%?MUD}Ya=LPADPNpJn) ztc`^=!eV+GRBdQ{g=g7`II3Y+hLt$%=3666$ha-b8Ow}@d0y=rq_ecKE|9`Q>Zs3% zh1DZ_gW3&=#E^cvF!c14vN8G3Tf#qnv@Q;2#w`xalvLPNX1!*7n)-w0liGhn_m$-h zeji6Z&ooW)r+W2B)2!@hZcwtoZ{_&bR1Mm9WnqO^8kU32(hTYd)LFoF*`M{-!*J;7}Tw+#lyC@6NH)dGP2dz7?a9`h%#R`SL=~kGWG0Vws-w^0@p7}c0vsct~Bkjx=S(@q9pCH zb|+`x+=)|_u@P5kwS@H=W0Rj6sWRcwh~r0|?8T&lOu2(?n7vaNsobzsWKwdR-7krO zQ}7)}2O%FBG(*)d`nqU2h{@I4Ai<*Yaat*?6+c%Mx+bOKw4SEZ4LQp-4FtuS3xhhqi~I^7qT-MS8Z*eaGezg%C4HP z(vhdGT+avSC|Xq@?ZTz0GzH9iPxOf;ZsLS1n=$TT=7IH;bWon>dJQ#o1P*`bE7V++ zYZ39w%?7;&K(5e=-@v4y;S9RX0}^$s6>n-*chlNZ=aI=Ea!BxoqeJjK?l>N< zQF?Afi6_4I^2&~gmq{{+EjeP|97*V{y1e;FTNDT&TP6ncZhZJn>{%#1Kup{nVw4i9JhJ5WIl;V@M@{`js3n$M5^*CRj6z-i~6v+!L9 zBqN*&-|5@+YS6hpbg4h=l6Y9%U#4ujrE6mb>SjX5<+KX&BYH2*{QL>nVDE7~!m`M( zoqb&YUS)+B14*gq7hk(r_L<#H-(ZZ2OT)wmPZ;w1uAiTrNdyh^>$SQY#(S( z5)_TTnKo;s&!4vpvo+jXz-W5AX{a$rdWMA_q~Own0a{{dxGwjVmb%&N%VF{HdJ`5G z9lTwv*7?}mt%olHy`-nl;6XuorZ&M3hy_^5s9D(_A!;7ncy*{dapLwP$%w;FBk&MJ zT?g-Vo_klt*vcIRQV*gRU2KGAIjo(Ta+92e2PYb?W&y|z7gObAjHXlyk|Q*qZyi~r z)$H8Fk?dB;(f;No2WH}kx+JGiwaVg%KS#^`#UpOF;T}Ypq*BORA(umW4PAyeVM6ZV zvp^kMs!VMPTd|>8DW_!x)2Q0qv1M)1xfQ<29WPPX=ke3u!9KYi{t0sf-%SskA?N+y z#xShAOupKyFiY&NyI~%fuD@%w)*D&-Z=I*yVX*sB7e9i0bKUCHdAFt0*I^y6>L(}W z$fVBh(kD^zF;XXK@hwlUHJcr%m{5&KsU1hoGABuMf+u*^!c(Vy0#QNpEn%If9ld52 zX_uU(b%FNvt3qwqH#_MCLjENDeIFjOm=s>-q`udO&RthvWzOV$*g zC10KN$W}B_`6)-+j1$_(Nfv`yQV(td#wa{zW=G?XQDQ=sn~+b+xzQS{kZXrI)c(MiChp6=2Q zMxuR}MwJ>0B9c3CBy~=AD~XP z77lY%%=t^x0nilNQpp5arJ{11jia&009yOXD);?cBUO5^G+mYQ%Y#guKrl8@uz%oi zXLBeCaLoVe3QckY>4BUGzTA+7pD{(O?1vP2LbU`uGJdjj1N!**#2|hAYyjsEeT~w0 z;%1;aLb0L@xQVwTy>wmRco7iOgnUJ9k5eQcV)dvKuRS?^Ieu|TE{HOA<_T4KzDt|$ z?-a4U3+ci!KXw+t#zicYQ@Y;6lQ@#ghT&<#2TWB!h;2y80NIEeM}H9ldb~XRuVO)ilm{y$ zo`i_W3_RG}fZ|z*cNc341){A(wvfgPw8bhar8TmnRP9fuDv64jL<(ca8#-QwCo^uc zpsV*8Dm)f|=+Ct$m_sa#WxMc_Bh8FMfoyQqd#-5RKJkjE-T0Kbw*J?Sc~qzsg@o`_ zjV6Tdbx`R1v)-KWS3Y1-qBF68#so7C@;xvrH1|~vsvw$nFW;wQ)fqv8ExW4J3FwFI zlt8YQbDmd@5dpE-drII;>re|u4V&walm%lPWx-Is{a{7#13dW>U`WutpRg2k{^tR{ zb0x-qep!#+KLYg#4S2knW{wh6!Bb+)A-^1Nwlym7B|T6LebcPeNmLJIigrM-+)+*x zA&v7H8RLvdN(|t(w8@+?%UY>LOKWc>pzH-px3`Byc2pjcQ-7v9K(rJc^tgIk%zFnq zIxPk{8H2kMUCCk* zCAo!a0e7EG=~5@xX!eiDptr5R65epI{?;-78_c7V0rxEZ4I+->>0yl|A zxp36@x%RKK4kft54?j_Wj+;Ik7opYUXI6Jb~a;-`k8`W1Lc>lS$U!;LX}1X54D zKGWaV*F5a)#@=FD<%uJU{^m{Zyc@Zhxz1;Z2#-?!ODcTFb;LOvC@HBH#af!YfXiTL zg{qk|9gvgP!ej<`+pBiAnX6ahnlvgr_u&b{w+6 zNx6g43n)rafzC1|IU(&_&=G?Kv>`(S4rAvWXysO(1@qk%MPbsY&HT+)`yEjAhOSrA zT6TEh^X*`>bmj@l(82Dz96l2G4w4e|kRU*2H$X8)tQZ}n^-3NG@0lMtr(|SSTMZz@ z4>4_ZBg*5euR}tE2@`frqs6|C{#;3Nu#3NU0ziTw8jroB=GB@`+UL9{@K;C}+djkbPt zYRQEYDivs9(tktf|97qu&kGg~O$eMs2oicil~a=YkA`O!M^y5|1XdLEVSOnZG5%H* zjwcmiV*k}sGch#TH;E>amP1qWsWpLCo(qMK>*vBj(=_?Vyuc1MDV3`U2Q*a)rk-b> ze$!ulRd6lXWVZ?&f*R1W$XXw-hcI2q*GyyD8BszP54no})Rbm&UXhKTVh^Y1-Mxqz zhl?;UjsAWFVW)$?utYjB=y^PehAWTOUPB(seZ-bH?h-i19tyv8?nZW9UWngpftc0d z15?bdZGk+YbOSM*T*6Nqc=VDm4)3~_Br1X`uyaw=ow_OX*MRbtAeX9VUC>D-Fnz2C zibvIp*lq&S!PgzEfVi!UyPQ;2Up>F4jm+QJF~~lz$9f-X zSy#Zia=i7PT8_eZX<5Cb?`^@c2cZOmT3Rs9_?xTrRoi1u;M1_s%JYDRuye1#s_H4Y zv+kyhD#Q9*QU=w0YO|mmn%S$Vjk>IcdU?7uvp;he7MGJMuoiaGQF_^s>#Pa?ufTE; zal0w%#efO+JkAwdtIVv(tJRQu9x^fazKL+A0Hpkr%g0P8n0wpNvW;t5jTN@+5vIUz zj_dJablw3X*dxr|v$j_Ic(yx?_lbAL6^2*eKDijZ)^rklTNWK#3v3=gdzg3?nqW_|@`Yv<+*Z{JRt{s4iRP>+E1D%K zy+md0hiwGZ)Yz=Lz&hqyj0lzSR@6LU^?aN7r~Tx;W~_&R*ZU{4>t(GIS^?hiy*M+F&sgb{4(%HY4nC&~n*5 z9~el)%5OO!8LU}|Jrd>BHQI%HHy8PmEG)S9LgJhF)w|kQkBE*b308vJY8wkpS_YNA zzGS@F%W^jfNe&y-&2isELpU6Y99HhWx8}XRAQTH}al%c5ZJ??>&bIT4z>1MsfyP&= z5fUzEkL^!|$$xBa$p;9gTn9zMr6~>X{^ha+^81e`^2fM~7=P?n19A1(GBtF<-+CM7 zQf)Rs`r76lv|N4A8_(C~!^3Pb;wEUw+v=|6z|(JQ39=z7g%{x+O%W z)8~Q0yb)rEL$5Ke%(D{AA2POFsL+s${G=2k^VDFMo(9(Kf;umNFxC_=$w`$}9)k{~ zPCIew-Ai@k=cRaTsNaW(%~LH-wAeVrm^*50g0QV^JL4wGl~yE17~Ggo=~{GLhm7YX zxip5?UT@-I=-=gb0-Yo$$u;Sw$R$LLY1=3a2Sbw|gsKl(>W3oZT-r>v5*!?4m)c{b zX`jB4P=avNW$_Fd#AuUn92G($@{uka!4R^*;<3#z>#ROU#Oq_qbx~xAlyz2e%1u*} zX1u5}6cp^0FzbX1G?-!_>=jK|V~HHOX)>9@mCS4XC0rn)QgCa>FVe)Xd95 zGdcAe6JFfN;bZtflR?juO^NMCIN2^b@MRPJjb1VzggR|nKR=g6nj0kXt(9AFbcOAv zEZlfz_6xK1X6}PG8~%=*y_#{kMi7|H;D+nv+FJtKqtc2m7D*<_FE= zhvxgG=kk%}boj)Wj+z0}$)!66yhrPyU9mb1?eP)qpB?B~d!$cq*mZ7>*r1Wu7a@?5 zIiR;ia}yPbK2mKnVT?puLWNWXoA)EI)CMV13~!$y2p;~wuADEr&8C0`N18%Q>v~sc zT*Q#l%h%1x_tl+4D!s~Ij2}Zr5Y3E&)ZwNE;e}?mjA3yvXff9$)lUYP0t%wc@&~gO z&s={UZ?13e^3o$FIkbAszwn+TgbIX=zdys(W-g%E*G5_;j1NCPFtXFkuM7HwKTqc1 z|3DNG&ze+1*#wbI7rH+9;~f>KG3mgmP@0g?v#B=?yAedUtaO7bCTV|!W-25RG2c)N z2Vzvs)@*_Mf}~(I6!P{uYrR0|>Yaq@RJ!-0aaxG8lJKM12ZHRM*7-?U8)B1}Eb!JQ z0UPyjb0#HZUI!&#BiB7Lv&og1Lmh&a;-6Wq(c8gu;g1MvQ7_5*y}#>_x>i(VQky*z zr=fYI5C5?j%mtQOY+0K1J0I2@S)c)UPdVrR%q09DwAil$SNVdOX%~faqHG5A+Usc- z8rHr185aiqhyq=6#JYwsbzX?eV?R5IHssg;fGZKsdjYqdTl}zgMy?FH>5-Tth|8&S z56uGvbX2}6zG41tCQ~VCJ6x)h$O4y3WHA2` za3?VQbHc8BmQ;V~>a3$4?7_wNwlPv^&?z+7FE6n>X1*D#fx-DrK(~BDoM^J*!kGDZhz5agH}G zC$L$Hi~KL$0Y!d{osn{%vs$bUM|HBZtWG5{k&>wJj)jvZbI{e4l2J-OJ9F|5^0GDu zG7d@hO|3M1guE~}hxb|ugeGB=V%DlWjOwpU8I7uZL5So%GN?P-D&Gmh1BI=`0UMxr z+DU@JH(_Kb0G}AiZe*^+{xn_k33l2b4qcvffIKyf*adr+oN;Dsvq%b zXOW<;QTrVSM3-UDHCdswzI?Ef$bL*4Qqx_};)ijm1mYh%A$J9N?I6VR(&x=^ZlZLK zlDeGcl8C|cJS0UA?&JPec=Pg& z<^rfPz;JZUCMIz4CBOhN01X+t7nxa~wa6v`s$s+|rA3jGjy$*6lm1gt=s|rOsP;zE z|B(FBP{XPhnZV&s(=|i1|E4cPm&B3TvMtT%6uNhc^{&+UR%iQF)fZ^=Qxp@d3N{SU zhJHRY*&d<=VChN-mBxU;608D)65-6%8KQ;}X2}&0IQvMuodTQ>p0|j=Kt>&`^rg2A z(oF*XC5lN0X@LY1rUEhV9RrA^V++m~PuB(p!rD^^kOn-?{ZXNPBe$+ebWY%H#u*X( zwjyfnT>ArVI7K@oxP#DMIxGml&U8-Tf0}MoA@1*$0=;g40H$pE&*cWzFQ@I{t1zA* zK`2N6A79&AFo^PtBZqxzi?L8HQ}j?qwGg3NJ3RLjl_z!~eFL#F?ANLSU*B^B6js|Z z??YDAv-7nciu|RwPmO6yt>@MnrL#}%C~J`oK&S92q3O6111PwF07U7M8r|kYH+5G( zI(7ej{K)u}n9@Y5yj{>E=Bytotz~e>VZ_iGSw*O+eC3K4C< zlrrzO(pK~}v6-+-h)8&OYX?!15P??b1N)XGM0k8vc?GKxBC4*Hd6N)9tR7S37=dzy zih!1_G^r8fX~M~wGIsIhyy;??Lq(pU&x#7J)Ci95;pMqu+`&U$Q}5-aZchTdQ10f$ z)^?>*)r)^u0{vwYh2~rm>ld3G|AZnW9Mt#gv?q-g#xYj4(+()IRHCjOS0c?LT~gbM znC8+#m$+xr)c|zgvi62H_=$MZbAf*)Qg0nu&fzQ!ZeQaexht(%_z(fRoKs>XrQ{G%`CT{UD1mhb1{FWRCzEJ{bOuI|Ej7>zH{r}I zvy_KzFy~_@>fKoWc~4T$XIS6Id4p*JO_FZ~i2`kzFTLfA%W+K)abic0=+mOF(Zu^Y zwPJf>YznO5s!Ffrr;*llB$|9e0kY84lK=RtHpI&rk_KT_6WRj&7r1eF8Fr?PraZF^ zH{lziEJ1H!zWU!huk545<#HU=r8Vat4+4I=J{ra50z>Q0eSsx!5UtrxKASb%fs%v` zZX&*YS`Lk~_;^JoI)b&vK8zppm)`XGM!F0no@QOXZ;9(1+J4O&hHME;2Pcwq*ldY~ z5N;B5y%cqE-fb==mi_)WDR7~k2^S5Y!G+>s^6tYSw%MHSWU6I9H=Q5~PRi6bLU@?cNSLin^<|zbG0GM|U(kN#`#d9cjvGf|MAEPmfXqfd zX(+;;mW$#$&aDJ7uI|Tnl2O9l84wFUzF2G8j@G`Tv!tEcqLCyfUZ}P|%Q{Z9Np$nq zhTcuFY66S#}97QV52gIy9}dvKZwx<;8vq$P1%4e=KkO-$0O@~)j;>hs*ia$p!Ru2Sa1Ru z-rd?UL|((ef>QkgBtO=(y7dzh6_jT|-3c3dOPJ2ue)AQC+4WQp2H}2!H^=3OSuX&L zjR@6eb-^4wc$o<4=L?8$S;y6onzz46-e|v`)43VYTP4uG*)E8NEa2gV@=4xr851kF z!n?JiqZ9h98V<@zNkdiYv3eQ_E_yB7!Hx{&mCM9Twv<183@>D9NpMa@c`v!($CJ- zRS;Zs9@Lzf3*;$n*1FP$-yDZP_Irif(&8;(uiO`aiOL@HEANFwH{- zXS_Xd-8;O*Z=ZVC0_b|i%J-4tsIHz-C9wJYN3xS;dEh@9aA#(F@#WPe;E_0Yr?^Kl z#0hG!!0X;H;X;Z>5Ha}jz+nf-p^pQi-5EmscS8gI|DNgC27mwpi`y$oA(Vh|Hb4R{ zfx}HT>pCo0agP_M%|b%Nt6-ANi~VUnik1ilhX z(!~IoqX_wiJVVQYWVuD_d>(oFaN9zuEUb5+w^EWzjUbEvr8g9_61Ve^ek~a?xzL)} zaU*yUKn5wrB)53|mM-H|%RHE6B3U$pt+k`++jst&$V5z?%@}mq zg}WXMn?US3BI|}6%`&T=i(wc)=Z7qPgkZ|nXaybAHrJ=#X6)^a8=LdMV9fe?{6D1# z=~%0^PGgV=ge(#*+b$PAyj{8*F86M2U7H}`iI_72Hh)agz1BD*0}zt6FU;DJNQEfU zdm5QVb1(E*F5zS96TazM!IH{5EIs}0MHS^t{Ot9~4jn7W?;O^YF3C@U{O}DVnG)af zl{_kyly_2sU(AQhE_hVeycZxwz0{Y57ML#gX%Yy@vvrcHM08x)Hy(|;PoA|$`~@A4`mo>z3nNci z2}+>-b7=kOi`TdPR4E<+g+= zT&$1M*Z)fcX2~)~S0$eifGmnM^b+bdbNUHZGZQ=TJXz*`(CwQ|U9~y9Jj~wb(gm@;UZ&P3OnI~tDld2a-tiUwe{Cwe$*?14N&w(n00;p4 zUz_aa9X-{OH>vrsuN}ogwVC!_fO0D8|y* z%*NpN+YfPqijkRk!bFkOwWohWIdUJp9)0``f+mXU1N>@AIo|&j0)C^q2d) z_a}Xc|9d}A{`dYoJ&%v~`(%ke@8^DKj^F3!et(z$cYlfA=kf8s^egvf^!?&dx+Vv6&Yo$fuF-KV`K$Q>gI1i}a`@QrqTdmjfZFGX&Ao#b^9zcq( zcC~7C2FVP4x;C!b@?IIsY@I zk5Nk0`FUxy<;Hm0v$v`0$mOVtDF1{zkLbu>AG)-HY%_ZTKB$%640L?%OKQdp*wlMJ zn9|uTwb%^gSSmVKNUYm^+nXwAd*|PgfD_6G04w9>mZmzC_2gBd>yYy&ZOxyC*n$y%xHs?|wd}pgfHI)41>%O5^ zIR4KD@LnkLWw&}S!wfx|TG4)lot3-jD6^aP4THpMw6E`+ra;0RsYdEB4OW|5Z2TXm z3hadnLh`3cphVAsxk1E9D$4MG-SStLDyI#%)T=G3%rUl`GN#^ta7yx|^Lldjd$^;( z5KEz#!t>M>K}}wV65sFWfh3KXXcLQpwsG(=!PeXihMPC1^-HOkT6KD2F>k_Ok5E@m z`QRjr0r7<>D9AqMH?Q+*S{>HPX*3Y^D2&?iI-A~^v>or`sB$w5cay|Da;PGDf6ke; z&ku8NBN9-)_c8yy!T*HzeSXUSz9oMi&Xv{r@11gFSb08u(KWO)zxwhptKC$ff?qv% zU{@MmV6Va}bIajcwX1la++p%J*>4QZHSa_|XEzXYt+e?rySgsRg%m@n_KCi_@qFce zugA*ry2-Nkmu;_go!l|s0(pDmS*^w#vZ&3hy&OIPyY!9yPjs%`?97HJW!vU}P4))D z8kw`{{E061cE0(n6?5vWz#D^Fi|;$-&Gm%W>l|b5Y7#p!Ea}9yW`|pHeD{nue>rWq zh!jvQ!VWVO5x`A%jr@y$b2p8?E}moE37K4QsLw9D?EAE!*z+FMNgU;`f~V}hf@LtemO)|y*A>7CJ(S%cn`DZ{9ioI>+f27ThRyMj4P}w&vqiS)pzqifZyl* zW3}OSW#z7Q(ChBY+CmZ`yN`avcMT9WW5yY_a&dAXG%rU-kp z!pWCAiOgblnWNpTe<6Fcq6Yh`zW53r0)}nkdr?U|DBuCTzQr-cyHJa8wmG(EfsV0g zS2dp>$bUFpYsI3yq6huWUiR1cG960-^B_E_&Q*6iF%yzh|MDX&MEG3Fn`BpTz#0hE z7J_8ZKspW`;Y)m#KjypS2*1(}3ARDT>2-O{r9*<=s!ZD=&Jt@>c1tP|U&4X_1X&+dUJ%MNOkSC7dQz*K6K&EDRCw@HXRK261IT~a)18g81K+zxbQ zJgLL4TK2NlRcZfGaa~z~SJ`SWyI7V`Y1N`qe~!$@>0WAPW@uYK zB;Uf#j`V_$1tY2#HSan`4ZC1$OWGU$cyYg#WLUl#h(MXX(Xr2xGiGLa(Y}@2HWTHv z)|a$=JM4BGmPQLTctE+nZ)usZ;m3AJ_*j32R%}nr1ijq>YvnjHJ7x1((kf^x87VS| zpfTI=yo>b(Y1*~rt}OaJ>QM_(6kBWiQCk;gbyX((Nte#&g*A6|>$%!=4^g9Jt)4el zfJ+TJ7Xow9saBab7bwY)*dsOb{<-ioK z%Eopd>D{hwf2kLu*y2jv_AiX$ICQPg0|fh12R?9Ai1j&XP0J6~O{J2>-k_4poyZ=G zMporKBo{Va>@$U^DTPB^ugeAYvzLs4^P)5O=Nj|ZKGKHf0u=g!q3mVS7O%{IHWEoD z8u;213cYZq)a6>~%7+pqUjYP4LxZ3Ww_tMzxRg*iijLxrBpN&yC{D~9Px!FZ_ub=X zGcllh_4WIat6As@*8w#6+_GMG5p-*q!TX-h2=(xHw)yJOQCf2z&rd+|t!4AjUg z#~%06Q+tDd`Fp)efbtrrv$NFt;s{IX3uj@Y)2_3Wa9C@zRp4T$i=##CRh6x6s3(6n z+FKkaOKQ*xYmq1Dawnb=xEsV(dMFfgQ%j3Hcgy3Z2j!-JSYT6&c#V@?Dxxa25XfZ; zD^f@&7WHGiWUY94F$a&_S3fv6NdqPglGKi;;g0JcXeLJ33^q#6-F7qxV)7 z*NkByr(zw)%Y8s3S@H>;(tR|>1jbp@7lBpQD2U}%qJ*|Xt7Is^ldoScl#YPOvX5Hq(Hz5dV{&3Hf_1A zv_PxL)Sl#$C39M}0@kWQ3h@(1hF%Shf zDaVLq2Cn6=)5u@V?HDm}o5V;`?`)bU;o_r`l;+HO_Ybj5g{QbH{Y0*MC_1Ni`Z`!1 zM_fe1z1(6piD{OLY^z2~J&DfZQRVb)WIg4KubU7k`zSA}EuSpi0`gci(dzhD|doi1XFG9WAJ+K)Fy5&5S@h z#0AOZ6j<&gRtyq8`ol0R?9J&Zf`~ZMkq>4lk6Do>1Tutg=+$MI`z@0Vfulk^dApXC`iXl6ke$r)E zL#*&FCJod|R?en9gX65|%LJN}62|ymd5i8o)VJ+?`aRp2SCU7A;CPkrJRV`~2ZWR4 zo2knsh9Py1`WOvY4c3tO(*;-2d;P1u;>S*&s7nPfexs)Tm-&in2zzXg48}fQ>5iWSO-Ov16yNz`sYig{-~z@*WR8@W zak<4SzZUJ}lx_xHKqzq(Xdg4f(x_GfTWiUgHEe0^)s!)^s? z;=x?j{P`f#Br5x7av?q)B<20SsI*!a0NvzTuSsEHcC0w4HlpA@*K8-kT2`1^O*ams4VcKE#;N$l+&sPt8!oaw#v=qw}I ziee=vx*Zd+vfo4MFs|uIsIO{?;a$#gm%9d^axb=~zb?JAj2_+_?)f@*wVhZ%Nsw-( zXqB}tZdpq2%7I$R1@4O66e%^_B&+NXceNhgW6#)ujawb1R+I?t@jXs4q38x}A_W9L zdK6RgEnIZ8;6!`G2>PGLQau7#R4y$_el#8U4NC23|yey&apOIN&1N7Vs()FO zT0Hl63=`?d=Y1u#el}`4<+i7Y{UbQtzK4?v`$|#fAe#f2pk3sS;=mV7Z|hhHIarj2 zn>)RNi{kq`%w)Cy+NfFxrEaN18`>{8n2D>$3^+>3f|9PA)cRb%pbFFxNwpo(v< z@GCer{Fi*V^@>?rg;GZ$jo<#Ic5AWU$Q8|^XE;5wGZ#BGkh$kLR2uT8wN+7Q=y6&! z0{w{d)E^^DO%=+W$Rok`f2}=gn?5;aCXylsH!UdotFJrRJqGWz&8Xh&QK@sj;3V3y zeB}T|O>AhftK;`{oSi(wccl)Qox-@e_i=&e_xi2R z_Z{2I6<6i|_ML}EH?PmFhQFxCeW-AWVhwNbupcPw!QoQr_on(~Gr1Ht;L%E`x5%US zb+!AS<^KR)MdxSy$W5*fUOVx58Rr2J{g=}7zYi(F z4W>9jY*-Ao24#3#^P=)~+Hl-ad3?`K55_t#Ey(4A$ep~T8EA8U}I@Q)C`vIb>N0Ku4PCqzhv6YpQt z00zfyu!~#6(S?=y2fig03R&hBlaZu5|NDBY}goS`*bQvHpt1r`42{7P+Ckdw> zo)~V3{tMNK4-lPW2FP48w4X8Yybq2Tg9>;j6)AFlNz_sz!}^A@L2L|$MHWF51FYh@ zw&z6tig5R{qmvn7-N2&c6KPTkR1^vV#re5j1sUMKf{gKner9N97b$LZj|eT$8DPbW z21PE(rGFN}OU^SKiAwfELqO65(sFcC%w#v0LO?HM(UfW#Qc7!L9Wbh?m{1K};$aKI zzek59gWY{)t04h@bs|DJ?%(Ludb#T@O5L9+Efyj&C81dp+>A;+u{PDkc$Q{=Xn|MJ z;OjX*r2ieoZuVrb9m}X}67|#H{+7wieqs%W_MVg&_tn;C{qYHHsa?LKSGW$ZF|dm!nymb&;?<8|LEp{{midi2>2pKj^>gN0|;1 zv!EeBzPDVIl57t2oHoZfYs3qsqk~8du#N3#9YR{5=CTfQ+Uu`D1e1g% z&u9>9_)tMXjpsES+C!x*P>6qm=4(5lR@agRAkOhkrSn0S{XLF2u8=?I=0xfTk|Iq$ z#sr~XD3I?r0#SFID=ot7w}#`g8;UdI!NzSI1fXJI6Xx!` z6%nlzk1gk&Uy~qkPOy*-*><&U`bm_0vSy8)T|@4Oj(Bb;Fq_N_c=)+97b?pp*_5fX z+S8U2#TXWI3{ zlIf}pj>eqLMh4^z*2ap#U>fByOfYji!4HadMF^(j)L6N-u%WbCfPHaT&D~`}AP9z4 zmLu6u3q>)uXi71B`dO*vrQawblW$W>DYQ1Tp|=+>04$lENEget(o5MsJJjri6iYeN z_n<_grW)Bg{UjjP-+Z~>k>VeA%XtJeZJk}7T_Y!M$}3lo_r2vST5h7=Em?Lh4aDAJ zv~wy?wtpc1wfQ-vgrF*ps1-L5^Z)7Q=EsSlh90JZD~QrPG7)OgF@dMTTnVAB2RpNu z8^19ojFa6rlpssoy5Djwwq|nut_LatGnLYT3&YIp)^Rj*TXq$RCGIY&NWiqKRLW$$ zRfWVr7p$-F0j@}&RAXC)ZB*6M{Rbi(yNEE^Euq{w1Q$#&8afSdlTqcC64 zqW|akI0Z6Xeb_ptS zLR+vs^`i%BwM8LtQbT?;?G!BSJ%L9~#QW#u4Xye6;uNr9vlynGFrK6F8q{9>-3hUT z(AqiRN9s^29?+1%MP&%Eg^Toz;qL?@;_Rs8>`IE>n@I<&HhwD*1R)}ELeWDQ!HPHw z4+QdamL}m>auje9UXB#=nbRRA>8q_-2fc)&|CWM>OfEaJ)! z5tcP;`fS-5K}GGh&>$ELvs~>wY8Wx-0L?K(mhvD%6v;89cMwxuw?`d&^jWZ;zkg-#!NMcXqSUfbMls8IHQ5-gtB+i$njLzbquim-1Bl7A)UjqW7OLf-czGU%Y87r zX&B-m9|hl9P^tt#EAR{A#Bzwrh!A2nuzJX>nS8z^m{3W-0NW&A)hjgAM8?X772Y9C zD>(`~Sz^i(c_0n91gXNb2-a&kc?T><7r)%1b%|}e6k?n$C}N((N1C*q&&_->JL&m} zk$zO|jG-d2TdQ?i%=EJ@&?KWEW)S{b0VWL+?AQ_Ep{4jrJ3+v^u0AkN9YS0TbWKXX9O@vf>{^ zZOUkq)41UgbU?&R12+m0UY!B}Fs&dlUC~;YUT-_zRj_j>2Ua!x$EaXcmQQ3-ZTK;{ z5tW=(Af<-m+2$>wxc9Av>r01aEQE0yyDqh6uMX6eI_}7UjDcvx@^Br0UaT^y{K%{E1XT)VIqf~GVPu`7-P z42Uf`c@!9<@{l279{{l?jQseIRAT`tVia&l!re>m!yLB^x|%1qhmeNy-tOz2Pr#E8 zs3t710VC&BmFFAOnqqz)Jw(`4go_X(5$uIfO~Cj&*g5;YEjfnBqZLSabEd2-TcXM8 z;IQVSma$OZwIm>37S({VFwT|+5mjg?d4#@&r!XT7HQZkF4%J{nVGP9(ZC{GPc7^{j(q~SH>mMkjq^l^LbB3uxmiolhL!Zb}w znMSX&sUi^Dw5&qsk1c6iI7_xDH2xgOUzQTcC95yy%-W3J9f3!a{ zgzH(=3k(6+UYmfs+A_9aO6W4?TClnni8YWRB2|a&U z0i&3G+@Vn@PFk64UxA7#8dHv3uB#(K3w`g%V?7Q_OQ>r|DsywFX{G;%t8)qxC0N$=m}_j?wr$(CZQHhO+qTx& zwr$VcwazbioHPJ77A(}g6|zmFvX#&tdx0Yk${ ziUed0vOR=fG%-b8eF~>EAUh2hv>z**p)6isD1T9iO4uEm5DK+AacrdQ*&H zZB6=|kzy>1rONZ1FGj50oXzZ)qKOTRo^|9CY_*&hA`4JM*EF)FNydg*??^={Y764Yp|Yg1sP+6Q_$AXyb5(M!9v-e+?E4MB`5G)aH=!=%c_Bu<5*l_%Kojrj{6ry~2h_ zzQVBaN*2fpx<~5`q#?9i{l?LhohVdMx(M{NFCP*cp&5-W_Q!p}If2x#;5=;eyT8t? zKR_wkO9E{7e&+xx1R}u&1R~IhYHsl3Dwc7SM79#qp#pFn`weZ2C{DrX-i3yJd+`GY z@m{8{fug#e8;d}5_=q3#`4ZaN*G0dHe5)e=j`aXi1wm+jATB{bF6#dQVG*oX{VUcx2RSqvjrk#6!ay_*6^30JL_VAN z7Ah{`%)(L9_?f2YSc+OQYh_t5KF0B;4B`dG-JmcD*uj(gnsXh7~cfz&Sn0vGWukGPMb^y_6N@&xu*`mUpw?&(PV=zM;fyo%; z$P2uB`0rU?f=KhzOK-fE$Pcf{l`ogxxMC>2GGIYk%|@GGlplP=kT{fy1e0mVLE=`p<#;o=f&Id3pfbc z`Ga(knC+h$lm$*XttEo!ThBZup>*sMgKAjX@71jw$k1vu)8v%}HVFV58#yJ`LC1R+ zHa8dh&fS5lt#}dNZJbg_EJm8ow1{a0lU9fbBQwoZYT4z>SMbKJ92lcmL09A;SAI}5?s$hgFXe)w4Y767Fb z75HNBl#hb_B6Qk0FRviCLO?K)w}F?36XJmloTjC2$1imwG>3y_g#MMoNie2Dj;{tn zo}J<=!69X&UlSJqX}FRDs-fz1IWJ17Oe9b6?fw$b zx`iq#gdpTrPxSs5h^5is$o`KR&KZ^}$zJTz%$x2~Kr#m1j=nDZ>Qlv0V|wxX?0*6w z_7jsslwS+i8FDCWq9R+`6tS6#`MFQKSi4cLgIfL$w15nJ+3%L6NAtHcQ!n539(9t- zKB-BPkW8p5QBp`WWhRRGJxj1e8lGNeQ$225u)}Z+`M)y>Bv!AercD=zR}Lg*01HA0 z$LHkAVBK~L{g~XljFE$nZc~Q7l>{e@Ze?*OqyM4BZ6=v=Gko6fGe>OezyN;sgqtfPql*1VXoI zcvDdqZQ{&Pt~h$gxx`(3u6@FBOOa>lguq%>o!$& zrF>O{4H;zFO(qlB+bNKY&G`kE0rnEJ!{wE>+agCjdA-r(h<8I+DM^-AD8-sMy09^@ zB5HhLGEtaF%BEO96<@7$ou=XdS~;APy6X_lf$uxgywYPP!g>0c}n$ z!&sv4%GIVt$?-f*g2A;@hvXd3`%v)S^_EjjvkMuI~jF1HrlQ=Q6 zcMqc7$hDf0U5RJ&u<~2vZPI4h->uD24~iP&hUA&%zYrJS;T2Nk@)6u^>b#0l_!bo& zj>@iEw&^LDKAp3q;t~j_4xVfKsqWEw>OAai7rY8|3Zik1y?gf2d46w6Wj@?{;$@^f zmhCqR;3AMeYHrwmy5fHx+Bpa8j3Tq+c&>IF7M2gHs7`U(NHR_^az16X)2-M-ph%F` zh)){zzBnje=1)#KOgWbndlil%fH2n4g1bB3zF3_|1IVsHuE%HI@5qXST9kGSK&x7cL$E>2$t8pJ`0wB z@G?$i%EAh(4Vb&j%s)-JOR8l+_ZpRCpzhbs+koBuHF%Ir)s54j?iusgv&mjh@>UTb z^-3WH^+|5JSdujmy8XJQuoL@PBf(};SAjaWsR36AS5C%xFqZwb@>V(!CK|;3C@(Pq zTamkaz#@d4 zomAzx-Jx)&jE^HgGH#KSp&U4k`-2L3*%*^bivm3I(D$&Ul-SvA3UcTS&=*m!FV&Vh}zxx$eRz_iR(N~8tRSi*{p!gPPCsqAH3{b*X%UY<=B2abWx2}jKI{2b`$VR6c95e+e zE=<$%kV1+=Yf7xpx^Hzv(KoR%8ISx>0Y7B}_a#QSgV5b!PCElZl{-hZ70L91cJ0|V z0Se(tUcsQPHL2{4TQST&Gt5T{EzEUX`v_iz9T75dRJbO6FG17rp?v3LvI0v1-XM1x ziAMvnM7M%n(lD{gr}tq^{;G<5Hg;;g_I(8`5q|_^l!r|_c6$rCszYDvYYU8*ANhIr zyX=kHHJZ;OZG>5b!b?nY0iQB0aJr)iN^1rMOLm1LYczPcB!ZZZ2t59rujGah=r8 zl(L>T^z4_Q%oi8CeR_Y!{s2V- zK0RWGli;3WDMU9Uwzds%)sZ6qp7!08IbOV?`r0WN&?6&a_mb3A^IOj4Z^^JWL^MHL zuU}E{*5nV3)gZg9-ezpeIhB)Vf!#}R#52rRwm1^}M5+{^kImHlPCq(V_}ceVO4|IO zV8`&&vzFUVKRH@Wly+I2zG;U2GZy<*veqnZco}N3wVZN08N!ka5&oa?m{FvY!K`dx zn#J@q0*FgUtWa@t_Ld*W-QQzFPH_ob+7R61@Mki!%lyAj;=IwYJeJ_D2-6iog=g6F zz5+`mBO^KFk}j3xuf(AuCA7Osj(tcJgobI!v7)>!Iq|H*zv!Lq!|9bKq5Ul#0ALIo008!XyDJ&~$6l!}BZtKR-}9;Vww6fy(AF~s@D&2*}D!S@ioF3jH}2J$(q1o<+ao8!Nkh-;qLf!|Axe;^QEgzN1ONN z_8!p3N)`P60AnYwHy^`@>|86xQt6~v-cX;n?|K(mVXV(EzV={sY z%6L@0lmVq{GFhi}_xj|jncLawd&vhLY(_LVapyvJh-k5nPnClW9qcr?QPdnSIt?+@ z>!_zW%;30ZrQmhpLH1qfIvZhfbI0?TB{V7^(g6_>|Bc6y??HD!hm7$yC!XMq_)T|h z$H1EDMHa;7b=(7fxAy!GEENvo0XR*!aOBwE)zOfpcl;VQuOsijUgyT}JaOi?@CFhy za!|>_J6IiJGj4Y~b%J$44ucWnUS-jtM-)&!I#omun;i!BL2vGQ8|O8@gI~#Hp|2ZHy1o6EA{CZ0R=A z^@=2aT?^Sd8@-t}qb~ilwE1*sZJ!u02akX2*vi_}9XX7Y^B$RuBmJVJ zC%WP!U!?D^LVQc57rY0F#lV6ZeM@l=G5=7>WWy}Ez=X6lKejd~63R`!v%5&tPzKd7 z^#(AG=tp0x25H9NvY^K@wF>sCbh{ys6wl*k)udm{N^*=mT_d+(L?d=Xyw5mxXY3ng zsmz}l3fihJcpj=cHllAA8jL))k8N}!4~x||jAhos&8~B0Bu~{|*SY61t8b^gYvg&lCfN&hq zJd7l5zBY!${W4|Bb}W~r;-=y^J;>P)_hqfv1vyV;Ux0mB6Juju5wC+33+gI^ioN{I zPH72o0UZl$sX9#86k}ib;ey1QWS2}u33?iinelc*r^psTUp@7K|LYYv4?K>_8M^|w zLgS2G<4|Z@NK{RP4%rXOZEHxB!yvsM+~A~01PenRN>AJZ5Kco+J1qgEX|J7m2(bu4 z{Fg0&7=jD?(bAeaxnfYm!VEt^3Oc@s(^8v-4Ui)fEB!y~rYe4cwvh`4NFx1JI2^cj zA!7V-a3H}*3WlqYR$g*_OGnsyacIr7P*ix#Nmg%S*0wwX>{?vaDWa50VC7bI8My0! z8S)Co`t;}^AT)9n-~Y`oArX4C=wSckKFa^fFO2__UoGEnVNd3kHgp##&+r0|%~*^=XV>()WFifCnJ zAYq>yRm=9t7&Jogy%<#ujsK_hr02~i%jxn?4M+q~Bl%r$7?U$?B01#tKtZhzF;)D| zh3wFj>E(NE(_{xZdN$G|W`PgAt|Y`sLz}2)&Ba~@l2@&iT!B-lR8<}ytMmfx5Nk#= zY))D}&~e%Z2T^ic&hw-dcdaNNOnH2GD&9eIankArPLAyQSiSY4N&JOOh6vf#+3!?> zBv1)F23aIO2Z0d&1}0fDS}W0R+~Y(LC}Ped3LOL7}K}_G-AQ?FX`P0 zee|9zT1GJ#_(=8vbck_Cqv-1c7|H>57wODaZDjXbS#iZk<~nA+=65Ff=bpONT%?<& z4MHw5i87I@O9vZm<~SBIeGs>njTqM+u7jR1w?1O@eth$-zV6zt!hIkH{o4PI4Lu)j zU+lje`>w$vPcKg$?p9$bgX_`2GQBrsL;q7GHBC4IwW|(SvlH&j(^E~_Fnc3H7^yhg zK2#|;o>He@YbL&vC(2R2>Br%(SaOG-gegwUsboF~Hb5hUHeauUUs!90%C+N&+V=O6 ziCDUzCtUqLELwP%Z=@d1&tK8QZr3ugWBio9$6`6zN!xtCvdCjgw#8KDDWOi{HxpFo zx6!V|D!)q{fcJaU@j{tdLmp}9B6Xa6o;{vHM`W{3hRUu9!nZ)GE2PCz?(>g=z&15y zf@oMH`ldA=e~g+?HZ0>#v6}B?e^p{FBCiLh2>`XwV^EYH>ow7LvaJ?@Cfhq-tOsdE z)1f0W*=bki_p@=|q3<0X>_%((h#Ay)9 zK~(zysnn4<)*U$KvjbLTvX=~k)H>c%hn%%TT~gYkAczQ&)u!5qT+(U-h8bxqC|6mN zWEt*FyLnh-?bFv1g5j}etLonAXr0z`o z)q**IJHYC}9B2;)x~GbQWJ4Li#9!>AKtiwT^b4lO_=kKe;u_4e##UG#V1rRh3u5UH zcv$O$vMQ4&;*2DecwJduNdl_3Gfv`j*zwg1;_Hvp+xxSGONBfATW|HNnqn zQD1;D<`SPvJ9fYdQr&S|4aLA_?zpX=540Bq`_fDh4ax*Hfh#?OMHU8K&|2ZM5L!KF zHrSk(h?IXuWtkc9^Sw4B-k^CEu*IA|HzR7?t%+Y-k$T)i(JX~Nr6o6(!ed2ts}-GR zygD;2755_(KFLcSThkOnG!Z*Ty@ZPZgA4ZWDDiuREe& z*=L4Xc1Caa+Iq%uv)AXlE=wc6nLT$!;&M;2|NMaeUxvKhEhXaoW5~&WGlc2C84^SJ zzZsJIe;8u%KMbLM0>WaIp$;9&$!Ib&bzRTy>0|fu`zh$z^4{FCt@UfhJEpsqQ{!vv ztHZlpoqBve{P>(6nm(!hce2{zJ3K8!kwqu`u=!FC8jm1>u8 zi2w7fU$LRu(zyJ_bgkHW;0L0tVlS4Ib*bN$uYi;T0A9WWjqd2IhA}$~))vDI2X*gU z_w!E}{X~0yFIc{_ZGbAK9peu?wj5Y%)Mxl3Se8oFMj~rg!>Fi&g1om;v*bFW_G4cs({!TBoxqK47Q-PZQ;Id&9m#G%7F$N zh4al-_j4DE3q`orh%m__Z%ivFBU1m1BP-Fx_{i6qsp zoByVp{41GFD z)`UI8UwVp}mt7<|^U9d#2W)v4mrI$SKbr3%B%tc(Sfr1IOc|IJrb38(h{N%)m$vo!WJ|!7>WZ5zR6+hr&_>jx z-$}RDru?aN$Q1l)=wrUHhCI{OE$%vfJhJ-CM$BcC8K>83hW5arFH^!**$hsC$Go;; ziD}&+@x^+Z373~uGpEYcx_8(hD)mcgCO_gzaQ!`I);>sHojy2ZZQ$NCS2|*gQrqjp zwx3#PBQ%x%LSw!W4#s#k`vmRwatED*)bMSHKZ7LuRap2BCsVoME6-#lZrttp@tV>+ z%7U6{rAb+_G}q_Z<))S*9-)BB5cMkkD{^eJ>ZH!`7V2pCl=SbQwMPkhtKqgN$3`Pi zPI-YU^T{aXf^69)#z1S*$^yV{fS|1M@MEwudls_T2aqb0PVy?NdDe!*PO0L^Ku&r7 z%TozkQS3R4vU`=JwXOhEX|t#ZIO+wVl>R6LA~ydR;{T5!`u{?MmdJ_%$||MKSgE=D zotMsr8GBT9cnmmd@h|kK)g^W9x_W^;X7=iXGZ}7#cZs^U$UXUKZc^|of(9}+tO3jc z>;d*D=J0wl=({xmf+J-zi+<&pTJgVJPXK*s9ZYSV@jxEs>L_i3cS>(ufZ-{MnmsM5 zs&5n`xIO^Ky&WM&XlCFQnE*NA@tJ@k_yr`W|A1`_bMS-%46YIMMmrnC@DGb!R)b)n;Ltykx?tTbPv3x?-ieeayfT=J z53JRw`?w5UmM){d7pa0FKJ?hX9Mxn2Euz<&3c-!CfvLYNM7@Ao+tm;1AKSm&w9-3M zgj@K~lw)qhFZ`N{d{31}9_!TkO){d2ZF1yXlj$Rz>`6~6_e3@F5dEh9f6WszA9^O4Hqoe5fV)d%>0K|&)Wk`)340FbHqUq2(v{{s?j zsklv1#NJ1>yY>iG;Xb^v{u!Dmkop83xa{gx|9!|Wh>2fhH z+~>118Jz_B?<2MwV}QPZwJpY&T|F`|Kdq|HIs8F!Sj|icua>}R%da-Y4YRzR-=C`Y z<014x0HK{x{1JeFU6p_afz|e-2FAu-E8Lpg!AVJ-*ynv<9ABepfW7ikBe_>S<#jNcM~?c#xK9$gRr>ccZ|OUoR_{ zaEgdS9ArbK7&gMLtik}#lBB?p_;|Crxa1be^^xlYZB|kuG_(`Su2^9Wz_`RbM@5Eo zBuQ3?CZHs`2|?AZUp;)P8=aM8!3YpXfi0mC{15Z|!g-4{@5YHL5v-y|4}=~$hVk?; z8fS~5mdIWo-}gVj8hPSn`Y0UKjO$%U0@$n*PER^yflI&(M$o6_2FbjY(fol(>lEey z#e-ME+>B;#b6xI?P07^0Z4)C&9r%yxOmK1MD1ir=9^pbJhEJX8Y()-9Zsdi@Gb@8+ zT*HZ#5Kb#R2{yz=vIV1Fz?UiQK=mk=jz!qh9W^x7?&jIkv>cOoPD1uN6bOxELmMjuTim^8l z8*1I`s#{6y$cgtkTYfHoXDNQJKBAqVe7d6V7%*81P|%t=HNqI=_Da8to#u3RHNZ1- zH<3KBgoHb~coB{eTz z@>B#JyA1GvATinUYGZvQbGH|^Ma4!tuT)}_`D&r9p!cPEgv28Cx?Q+^QdkoH7`x!d zDT93na5f17-kHcM-)QXJ_!XA+RJ&}p^C?)&Y8Ti@COYC3*jhR7Fs>a&Vd?EIH`QV6 zwcqOdqCK?iqas8kq`B2_Tn#(4NZnX-rG9^Gdy-jimd>@8v{A6Fr3Yl`QGfd62w4Q_ zSmG+?k$vl)KevaP=()*H8i;`RZNLkQ1xZGRJtZq{74K5@;7;uO>QReG=RLU;u*XJff0;<;2f(e(f~Q&<=a3F7JhmL*Vi@wd<8UA zb#|dLT+!|uugp@a4OM#eXG6x1fjtdGa__q~%SLl)?Og^;SF@@llNh35Bcm z{upVWcGZ+)TUEK!8=1wQ*%)S3*OG^?rL<&+ib=`y;saDK=gIV=AzSRtD|j3~ETPiV z1!t*95vi#Wm8$eh(UXTYK<}w0=1CYNZX=JQZi36?;=4u?XQ&2WDE2}&*yURe?Ksp zV17xTxT__kJkktldv<LUpVb2t#F11+nA9g7+z7ql6K>sXcVaKFTzL~KCy+jvir@&rWMe3;C zY%a%l5z?$}Cnb>%U40Fl+MQkh4J}~;U4rce?RDB>nnISd%SzBbL;wa zd(05phI>jpo&#)a3IinaN8gzrYKyU272#;JSNGd}x!C<>+(OvK$$8WOJ`E6 zftRbAc@o18<7T-Q{wKPOD;dpM8FS8HKLgJ#QYleS7i3#3?Gt834wyfb6UBa0Yg=P$skJ2I|<%;2pF$8@ukR$qv{cU+Q zH{!u++$=u_P|-I>$4%|?YDRd)@dl4iUwn=eOjKt#+^>%yUhKrm1CTt6#-4;F6TMm5 z-$!uFS;9SvQ;-C@59eY9IR<_a`=C9Ee1lu2N zV~q!TA#F$sCz)v^3|(^&J;iYRtNyrdkMUkf2S@zwon98!$6NHAby?R>w$||K0rqvR zOL`q)+s2r2KPP)vkXE^JKQDJ|L6J_f%4?Bi-hovCd7gomqy!DEsiz@-c;Td-s@R3$ z0r?K)9{2^Zy6()jjEwD(<#BGO>pgVIv^SIH{76jb&EuNlvLOEh^mPS~DXN%c1Q%T= zikUWc!lf6-e72}jqnCHe`v&?_REocP_x$H=dGOdaOvs>eWq@JtT)jUMD7VX48EODc?fe_){c4}V8a;KARekOyq*#4N^p2s_z{K|dvM2D zLITm`j7VJcS8`iqc>{27@LJe}T6-Eql=)7-4%{;-QRJ0nm`h*Vew0%AG52k>3-#5G zml>o79~X$~6uV=vdT+OtHm(Pi-Y&~o8aWl`EYvrm>8!AZsYs$m{1zOq3R+5Rkp!-@ zFpJ1#hWN{==j0HHdOjAu;lpdp)Qa$Q*UMgWg?Pd)Ukm=Sq@>T z=#|UUG^1UuufX8}0D^-4 zt6*jMpMq6qGZwoI!RNN_Y)m){gW1lQseB*;#j4ZHXfbW&*{9 z7H@mBwPwH%^;f%#$;M4&8|E`!y1lv!@cZUWXH3u^Ksp&{2kJ@M{kMJX*Q_OSI5)HL zC%UQAh#4s#X8HzX>(Q9+-z*>I{4WSWyv{-~$}KWA=;RG* zRN#I|7?syv)ATCQi6DzWk}WjfP0@&^PKHCuGx98Hd$JrE+_wq~leJ(koF1yMiR@{@ zgGdrhrZ$O_y!XZnu!~4+O1f!B3Y8k^*S%~*%mz85%Wo52JvVBaLN&WwCordCRz7z# zq0gQ>y|+OENY}=r4O!LKYO57EpP3YuHIEYaAeR6^$SDq+F*9-nS)tk(Zl=ms90!I3 z&xmZeAA6xg3kO#KpI+`DL*^47BWKckGGmNhYk5?DOjdTWab4a*@UlyVRY0E=K6y3qFTkJ8zvgSw85U z1{XQkVH0sme9={qW=N(>h8GfJ5nl-4ZPCxYLEmf{6D_TqL$X&gZvGW5cLNs7vNgO2 zFQykTsc}PkyGX~>njoSV;C4xV{*J|{11?F1wAM}IHL6zx9qq$eGg$+011?Hd zL%x_@1#MvsS9_72qB#!hpSI{=^e2t4{W53#?V99FyI_|<3GV&NvP!3P0_+C$>XtUE zF~C2!L(QEFW`gXDqA>oKH6xT5X(Kb2+eR&vvVOB{L7=f zu}$?Fm5a^|ZoSf4`T#I>S979CDqj!gey7h3%Am*K6tLEsf}XJsfa6;`7hy~Xcdlk7 zYBH zGc^{c=8QeT;2eZb&3sNc%WqO~!ttZ?I|o~y<)0@JxM0)=!?;4N_;saRMs$E_ z28*PXS=@oiBG%JP+gQEySHbaH1d}WG#H@|FIKRH3m6oq!w~R;kT-IaLXn}0CJ0QtG zJ0~@dH*4wJLU$5CFEuKH`Ro#@T5f?95ik{FpF~5s-o^5e%}zVq3Q!*&6%5gM!R^Wa z=_q`~zl`#Vv=E4yY!bp=i%!D2vP4}Zlw5voA31ms*gqpp;FpXBrsH0TFqatcpMydA z*YYL-JDSCI_CeWy8Vhd z4#bf)*X;<2_c^tzgO$)GV0UKuE?-4p;ZR&dw+*p(z9o%0%Y!nrqyM1-vgm@8kE~Bu z-RhCt%mi^FmCzFP+Dj=~1v-R>6CA={&Dra5uaFP(wXt`BDh1#HSk!WWP}mlJ@NOXi4!vnp#H`0|GIu7e#LSgDg^Oi*9)ESO;ttzkCwqXGQq`Ipm<{tu~9q>Dx zm4qV!`-Xlyi1!ku-FrGoA3JnYcnP@6s2|g`cJS2}u6*u7?yo_jV~ngdAG1X%qEyN*Md=^k(Sx_J+4pjXj5h z@Aq|#EpKPn*ZcK(DBB|6O4slEX?L^DK1nl|&2ly(8Y_ZqM9Fud1OM28pT>9?U0}PT z2g*-n=W#F;)8IAyqkn|$s?*z8VG30fNmomD)1gIxXrwb6S*Ztzf{FGS5dbJ(LjEd-2l({x;_iu(lSEOEyk=O%M~Dekoi} z8}#-Lapt}1YT3nV79gO0rKsp6@JrTwJ&ef3uoHjZSGzsFr>^Vle`E^Y_fJ2Yy_HbhNuFKA-NMO}+V=+!k})%OL4u2H zU};O>`}KjIiNw=UhOSAKe~9K6!Ww5&%C#!QApQ9p9I&+PO$~qb4qk4r;xAdN2ZjRl zb&*h3otoUK0w;JxVy}rzsszzqFyx0(i>_cCeYk;CYtIuxrOz~&$YDjij=V;R7Ek|! zK}bn~4M2_Lyc7$Q0<^ry2E4alHzFhLTuR{ZQentU%36`Z6<{?hBI1xO7zl4_kM zLnIh0pw3iS#F;^F-xEp=J<~{g`CjElRksIhL0e$~1rgbzKv0NjzQ6o}Hx;5a2td7^ z(jPRtJiz1A^^0{$Pcw1LUCy`x_%sFm`qxoof1m_-@DY&Gl}$J$RMQFgm-NH zsi_e<_rcZUmCFS&ntr&=8O#V`GJ!Oksbu47I2Qy>y9>ayl;8d=7%D5cFDw=L=o~eR;;?o0ezk$AuuT zHQ`H{^f32DGPW79+Pa6~Aj6v%gNpehJDCOz>4A7El46|sxg!C2X|t}FMerfDg<%%X z*vU(Lrmz-y(p6E&Li3A4vYHwvX3WL{dvo-D{`OVeYOa1bX&JwtPj)MJh*v3}ww#Ra zKU^#TFINt?An0r1*eFhb-} zU_WVXS-phtr+%5?kOg2?DMBnQBzW4)5b1C2$d&a{B0db6x01@*(E_mp7_hg>hKV%+ zF{#W~YY12lH&$YE91w$}S3F2?GrElfJ(dN-#sQL$o(3j|86hjnG15N#6G#+DM(P<7 zn7RJO@N==1t*WQ#j&RasZ^xDR@<_f%bLJ4((mCM~OUP4m6yGALP(tq@uUfh0DL;}$ zB7lrG%3N>+UFM2M77At9mNsxCm;mE2v`zmzJgTOe1eaLWU+X zd9r9ldEmQD6{31r)MIko`A7inbnW7mZZ_AE&Q3!6OFgePYrb>joe4Lsj zdjg+QS?u?fJtkRyVhc-I@hx0*^zfH)kpb&QsZM#GlZLA#+GM^pp~8g>)-&|n zWbV{c+tF-Vpd^9Ft5$!qTC)9)C&MAl>HsreZD$_d7XKnZ&{gv&F>gf+AzpfKuW-34 z9n3pecwU#k5^Um5{Xpv$ocgwKZEy}T#3t4i?Bg-jE;je&tmaa9e+XsXL7CU*M*(CG z2JG?Y$^OW{6+mRh(Vt#{=b^c@|H#r_L>U(*BT&hZP-bIS{n;L9s|bRQA$=mZxeu2~ z{NoeS0C2+ro@Gu@A5j&`W#Y%5s*~P<6nnzxMw^H*cCg2~&ZJw8%cS8NGj&WcV4`uU zZ7PO~s!0|{Fun69pH(o)0BVdEAo5b;COhYxiT}LJEs_hhacIWlMq*|y)f&1QgnSmk z`|kIg!^OcuNK8K!tb#7ACDy6SjxYpjqLHg}cO zV=tn6>O(C+X+`)gj7&(W(t41d$gOo$nRU!S-0^ z1d!G8QpRmAfpbkL{Q}Ca_F@!9+D^)u?t)M_g8`XYe43Dc&~JHE=aGeMq)9Ykexbfs zO0F08|2wh|h(DanF7N>)9xy6Sif|5Hra|y7ir7UwAPLw>{?=X*dF0F4I=@$KledjOYzxU(Y&=fBQ}Xd7!rHPePq* ze*a73n)=tbX@mv-; z8#ZyOxXznJd^WZ8`wv9J+AiFxV-Mw^b38-#SV`?NIz8GLdxeaA8Y9n$Dq5k z(P=z2>#0p9i%a_6uD@@0)poxfsW12aOTZQLs}FAhLe>Na+{(rshtu3mb$DIT#$9Z* zSk&E&u}}D#ac2EK3eh7=cfaH>3!5D(wzcvq0Ohi(@FO5NM7qQ1m~uTH>Xny>0H82# zYx1u)J*xqaPk`PXtgC910)$pkR5p=a_?Ue(4D&meL`M`yB^&1C()%O}uhZ!^$9@9m zJk2``sbW=r)!lTIlzq5dRg{45=|Lkq{!l|l$J3dWk9`3Rf|tLVgInvt#?VSV*!!W7 z*eJcQ5a*=~wK|?z9eM8gw$CZ*z!~WcHs%oZU03yvu2$0D9}59So_#{RF0-c^{hR0E zMU}}kE-`W@DsUmt4D{L9>8rJvTc^+#2D75}EjbpQOTGB`rX83euz6m%)!qyi_3NeLyz*ulqQ?1`P zKK>&l)q)$0{7BPSW$jxLriu2C)>5IMB}mR_BuVr^uzRG zC-O8ZW=ra8mtzCoRJu-Gz=&VTpe%T?3n^?93>Q-dmGrse6-vA<`HD4?L`lF(nb?Id zKg?Na8fl_>_cybFW|X%z+lswQ6+43lv%CFv1G7N(wXD{2IN%$!#f7OkCD_=s649Wm zQ80a@lDFolpeFqO+Sbu3tQYV80#RYWNQG~O9t5nD&qim611Q>%*3}B`kJ_DAD4y}Q zDP?SDLVVD5oPEvS@W&=yRw0#$3J6As*Dh~T$myNLGPAQf{6|H?mAkNfJJo(V`xO!G z-NVxwZ>oLW<^$r?6{ll(8zH^?Dw|3@A%3yh=uruWuoglSYg|jcnFfB~I)3>KyTE67 zyw|RZ89YiN1xqct$X`{}83|@>iz=nW89H=h{TM=3yf}@A( zB~1`H8`3?Ub6CGy83ufCw;eA6cPxJ5@WbxT9^jE_qfLCT@FN6A8I@&!c_O~ffS?v& zoR@G#wdIg@O~%kR+_(DisPN7GO%>3<4m@LlIZT{%e{VpoTFXyE>V9-GbktZTPBN|y zSN%ehTs8dlIZ>GE%7RX!s>xk%9UzSG!p|%_bb>!ki?4ki3G*s(#2ew!09T&{xZ;s2 z?+}dU@Mt;od{12v7W85|ch@&^T%0uwS_&M_E`S9`br5IeVLDIh-GrVv>WOEq1(;aF zol?s5`Vs{yDsJT_P3S82={FPS>9@Gv^wH&^kgjmS^x$_JuD8_QFt5h(l^6Il*&542 z%$csUj+j;VYuqo(bJ0T?e4V!G*|C?2wGj8IOZ?L@`lQetwmOLGNU150Y+4|6p2_F+ zg}|jL>?de3fT!dSQdSeIJ1tr_*SLihHQrn`8XXN7arv|2#+3&-1-BZ@?#PNJeuZh@O!%WOzWyn zoB;{(ydhf5eOXP0v_j7hk#Y#3LNpa3o}akP)M>bD`Cu^Tp~D(@I81!uwxXTRd2Cg| z0%NXL;K4f+uHY%TyTP81*GtV~g0BGNgMf6k$>IgH*5Q^~1>FHH!1`Xh zsYT25%$~IMZ0pA4uJy!yfHkNj3xJKx!eER4Kd#QHO^^UtqCIWfwr$(fwr$(?v~AnA zZQHhO+`jv^`wQ}`hpNnq%s2s&vt|+FAlDOj&)g$lHL`8_(!75(xbY>a589$7*!t_VXV0GK!O-Bwf()D*zJepYjM;HKO?F=xGln^CTn$JQwPep6rIEhz&Dr z*(b=5-V}BZsc;a4rKgJ;?3u-z<-09)t zzLNN=a%t_x-cj?rj>>6|*PyaDnDKK1Gaq9G};jZ89UoQH)ooKgOv8EEhfSHI#U0Nr7erE1YOB01PYTG3df;X$qM&X zge}s|wwg4~Z5lV0Yr5QGd$$w+IaRqqa}eeMOz^)9YByi=AWwy8WJW)98=7Y`Pr9#B zXR=flCEQNI{<|2-Womnt(zD#j_qe7Z0zy9EMu1}kjo#nHpd5S=<9s(VI$jS9Ztqs}_^D(`O1^F|-fHDw z$6QLu)YjyAF>K?`y)zM90Z7@x#+VBxb(jsULSutMgp<$tQSUzXuq&- zpKQO0(%>ems)%dfN>=*wGtap7-Z_<~oq$l${4CJyx}}XY{MQMNL9t!C&Xgoc7Xia+ zimHcpFK1zP4+WubxX}d=(O!NA>H_F2u}mXE6PnlX09KpOJV1k_SS z=Y6wB8RPIYAkypGvcO-O!W)a8(IX|TGEJDrFNxmCll=z0-TI(RXa_G%A05wcrkt!6 zGvuG+TF7a!1sZ8M!X&03Ss;0x zIB4ev48(R=64Jm2QM)7sNX+_e>~yO9uD-Ex4?AHb`ctsjwPTOpG5;-I+uB}_?aY3-ltv5ym(N-oTxS9MzGiOz&}t8#KZ;V^!Y#o(WHcOsk}@h?FhpQO z)cDx2SKB(=5j47CZL5;z{2wE4@6F!%I%Qr-BV!#x=>{D{zeEObuEpH#VM4n$$EcF=T?`#64#V zgsy9caenR|PYi^pF6i9gsg))M6X&G$p52Rl9vBivSARz`dKV{T!GUl8DK}X9{Lvi4 zws=y(u2|enMR_OraNx^r{r-F4Aoed zd|KV`nS*+Yoz2V#oGQl`r_b)IvP@4jSys`ayPf+g0kiJt*=k$)^xQ+xORh|&PmAU; z$*=f(k$KI39w<&66dPPTpG6zmL4xO(WXD<9k60qaIHSxdnUz4vBS{&W@^^2v)qhTv zS}{vkZ~}Q6ML;6hj8VGe4&^tFbHV&Ge*2#GzV9{GUt)^8-v%+08zct)Xj3AN>GlG2 z9+Lf^Y#_ySv-@egWI98iqaD(q4f7wTbbibx^^ZU}Ie%gRNt~YZEj{^S?T8*gZSWKl z0>r=$TI0{&J5)l<&4(0WgIBMZFr$Xqt?5??Xt!_J%c&inL}FwgIk){l7Y?5j?t(;y zm^$2(fqblZSWhLy3J^v@&IzRf;Q+x(`3c81rcOUYBfKfiM(YA^yo4a&^1wcwwE&EG z2$(2jo&LtO1b6Ei3{GWKCo_}PY@Bl(KgGREFpwGt@c&)8_Av zq#t5$wb0n1mO(E79JB{{ZGlmeI_NB_(e1NEM6=D620xkk!4-x3LXhASWi`D_~9a&C> z#9(Wwag*nTc~Gp}yB=F26k!|-SC$fsQek;(xCk^K{D;5w;fLf;P`TpVfD^4Bo3XK;J}fMda2_4 zPG6{h$kp8Z+O-mW1Id1dLGIAd_O1=V&Qq1Ej2^ceHC%wXm}6`Thu~hiw5K`q`Z^>& zNwgJ)WCpaMF!ukAl_PRZ$ELIn106)&&u=uM`)xKFfQEk_#8HIv{p;nvMSqD$056>! z#7oH0P=UI)OqSc80N0 zEsf zO;Z31PkDh}-vRhN=V<{@l9G1mRCjGt@37WEgk*kTjjD%iu4uAtHypZ_&PcwR?^ZFQ zIkdPLq~i71_KkvjMj8tJh)*`HX>fFw^Y9zQ;a~Pf?P?{rxkK3WAQ&NR8J-FQtmJ5I z+e3FQNIr)~2ujt*p<{rCFL&k^j(9~{zKaAWQZUEhRsC}r2f`|@f?qpIe(qVK71WON z`cF;5?Zv+$N&+hRv>ur4PXNeb#hsc#z+tjdU%u>V-dh;J(89l#U41{qCt^48Wj|qU zokU!^4F-NqicZvkZ{1$_AhH@gMBjBzT*AMf<`-^b)r@qAn)0}E!M+QRl64k{C@eYgBic8gDxk6b`5U4lJKOCG z6`28$6#)UUzCtQhu6i_V*9qop|B^O8?&rICX3hmT>b+-7HA)xsvIg#i@Av0tog3Ex z_#iF>(k4rS2d|Ull_gpXU&3sMaWk;XOk2%9!eOMNJaK7ePo!uA3M$r6ZlGW+qXTfy9#zmr?w_*Hu*GCNSr|DU2ZnGKSVj{aX#a)c$jfpC?gfSkXduCkx&w6CU zHw^gPR?lTm|3Cn_Uc4P9l>7o)(NV^}^Wi-Ji2mW}u+jxSa5yS2y(|Ft&>M>^yJqV# zL;`Gcdm6l%U8*=x_I9+HfYceE7v0M5|z!BvFTcpRQ;(mMK$V_p}DNQvG7DhT35XA8_q$4spdEO3B?Y zoA5<3aqZy>F>*`d_b#EytpMmOAjZ~*lA^xCt=^PP96~Bbt>7<~xHZfb8a)L;us(G+ zZ5L2QEeI-^J2V2S<#jjtgd?|uJ9Ll_Er%23M;he&(j_O1G?05*S)emyQbsj4NTuC6 z`UhT5d?`GriCRpkeTgqYlg@bw->p1ssD|lFXo$lO2INlhDqf{gISi z002qmHEcJ?(B=?6h2xJQq70HR=@HAF3lHFck1GUh8Xo$BH(^$`TAu9@IT%?qD2B9M zyvLT8hu~+U0=6%5guk7}g6-gj@=pU)z#kcvDQc|X!KpwbF{Zi8-5?mX zF*fjFh)g{)vES8Cm>r_oTp?j5=~(7rM;WX^e#zP4nxr{H_%`FI1ff9louDk>Zyh^8 zp-o^iaJznqgae0D2(S%c8JXw@!+$rxwyJN$6ur*f4eLzx^5S9K?Doux(|}}pJaIlc zw4{Q1BD;lS_UbcZ0uiDddyRx6Aht~1OzN8kdFn?<{q%s|6K-O%hZesT5QR62!Su=d zA@X8VZ-jTVup3XC0AxPZ3dwf9vteng?y{8SCq%V}BtSEXtEB%b7k8|Nn0vr8AhMe~ zcya0x&E{*0u~&`S_ibE4clu~C)aDFk)Xj!kC8Fu0k8pYHW3mtRjd3g&uYfS%_$QE# z3<(YX^YKqeIQUPAf!G3`i~F(iQsaVNGu%w}cY~OL`>ruuF>-<52e>QSR_{F=WamTe zJIpwc^p9w`KB5~&f1Q+IE>p;~u?Bw1m87GX@PavbPZ1&0Xa85{N%m>J<2>&g>$It1a$d#leWGBU=F*4JZP z4ej*)G}Tb4k-o~!u85YfNB)KP-L8nJy5-; zx(Vj9Jv%V}#y$}H!JKf%;)wa>F%VDq{qWX|#!00+#_2_8nUeb2#xSnj#y&h?#)iGsZ zJl_93E2wsQ8i`h%B9AYP9#C7oi;S$mxs8ncSR*t|svjpW@hIT-UJwIoFhvvsOx6%B zmdNjbV?oq+!2kQV!~Tn4^Hxs>o+6%oPaWvllnGWn{f}A!MKH`aLCl>dRRP(*leA?b zsH-kR?zhs$ugl}}3$TxG4USr^Ee*3NoeIv-5G^5NX@S>I$Sj{*+L*EEzV*zmr8GAW z`m^sLy#hc>RBbTq+)(6z=7JSk(i?3^jlEn_XkHSgV|vl6z~?!6(4;9;nQ@&;ez3lx z<=6yV>w3{A<=?I3RTW<23+J&>!pu5oPVbh@EQJPI-~)%T?Jltz)iZ!8psTe=VQWkd z<`?5E@)skK6)=dBf3zLXNzBODXSJvi?t z`!JvA?%yyjphFedKci}4eA>G?{Vo?`+QvNEhDe>TpOfy((0!@Eq>r$XW};UkD48QB z>}5+rlPFw81nIj?QAB2(YkK~gwB-2%>6eCK_+|`A&9EQfl`qVrIr-XxIkc>9HM>A= zKO_D==A{0eg5Or2(w=;*7fC^~-qHmt6z`a^Tqn^s=Wo@@g0HG9h(m-H=Wj++A_W}h zEASw$FYR#^XEj^t&nDQt;%l#^+Wl|`aVo8+LQ{%QSN0WzD+c=+(aCS5Fs&zDADV-# zaARAx`<4H!;HKw^@nYXEsU$Q|--iFacGQ^Zsjr~r*AumZ+7^_761-us4QD_L8!5k1H( zQB2u(fNQ~c%tyJ4e9fPP2P5xnJnXhh=G2T2c5TuaR{h#0?iL%vVgnDCU;4e9eEL_%j1PMvL`*c>%T8{Msre5kW&AZ(n{kt;{3v?)f-tAW9U*i zFSgHTCnE*hzCGw8)g~V$AX#Fc%W%^$@9l)W4o}UBrJW~!&5=TD=7Sk9{wl5vYF>#Vg&n{DQ*Jlr%eUP*pHPVv2# zWN#W`Uk4OvrkCuFF+8`1k3nCH8Kc%frzw3RWa0Df!{$Tf#usW5Mb>0(rQ{*Cc~}D!k&ed*Xn})~&`WtZ9=0C{7 zeduj{_R@~-31mY<_Z~4!9P`xlJ&pqNM0Hm8#ysM22M!3hiiauxxGfQFH!(zJxSat2 zMNJNS1IIycfjW|3P3i}f=W`%vj9da=MC~HXWj6Z8kZ$&K7Msyfq$AKV-X=5lL-czw zW9UaVMVTe{L*d20cm$U3JnM@LKdCtK;6tJjf(LAlBjGb=5{@OSrvni94^l^Ug@Gfr zX}ZOIu3*K&cB%>X)FuY8BhwTZl`ODlip0}2G=?@3Ynz*;p(Am5t z&W34L!1ST-P-J4|M{rg|E|9vw2{(xN(>IQsmsg*)zRL~UD}3WT8kNSv{HdWHUu6~n zm4y+;;QC7j7?e7Uz~NyjE_J9f(Uzvul<5SO=If8ouK47rfg+Gq)|q`zg^IZN3A9R# zjyGIP&|@eI%|x=BIV8`M1)kNwK5j}?{x_c<%1s6(&TsYJ;HfshIy6!`v^^tW{}doJ zj{%_?gtZGCtHBN5o*`>tKpBHQ*-HlW5%@OHO6Ew>f-;t~njS@b$d70#`s!M~I6jGo zSN)Ddy_taDD(s$Z@RY8-L3<_7I~%?&uY}uzDS`VN%;FR7zq`~dia>K4H~@g4(EoHP z_Wvx6HKlDgS>d}bR8Ln;Ishf)KiNTLJS^q_Vb>oBC6Ivp+3a}zeo0Vy%hAHHS##r( zbHp|kR&1N<4zI^k83bEe+})jSpNHljm#@#S$FJv#A1U8OUuSPKS2v+AY@uHX10Mq; z6|Sly7so9J4+EZ^ZY$@jr=qSF-wWjp+vejjS*Ga>PT6O+X7=4!_0sPlsH)dChU+Q^ zc!59fE;X9Y&kiqpZiwhOLVLQEJav6E5S#Z0|A=p&#WB$EY9(7eSzdp*Q>aLMY;_N9z0g@5pXYhG{iLx<`1(?pSXST}NFdHjR(y1w@UrWAT%CmjtkNxpqYnXuy!^ zHyOYoyMO%2mk1}f(V`J7VnxFb|MHl|gR(mIBThUXWx>7F1(*jS-0Wt!1a|VFlTx5m z3QteUXq<5cMgXBqSA@8VKR-ss1&UYx6+3SO8XEzmGy#}PCUpWKphEo`)y69UlrS^@ z0{TE10B-z1F=Wb;L)LRuQ|%3iX38d0#hbnJv%+E?YbXod4jA%#j=GYl%;3 z;08$a+HrS}SWL79BgrFVnj5w^fBVTwaug7BmMUrmcW$JY$X>_GbBezRfe9*vmK=FRv{ ztN2k;Uhs7xZy=rQg00u}Qjm{EE9&`5bRy-W2ks1P_~i+hb1ka z*0+<}Or`!>9TGd7Wl5@MeI#lsS@s$wkDrVB1SQNx;l;Pb?&4?34VvR2Nh`^)Iz*iP z>k_B9h-WUB)5nd|C`Zn6zXgC&>kW*X0C~)tP`_uOXiHXnk~@w7rz0!FLtKLM8&18h zCjH)jnRnX0RKi*IX6i59^Sar&O`#D^lNwwaeTcr3EGGdAz3u@VX^GXDaAg*WaN4N| zF?IIMkBdJTiMBAFy=wJ!saru;H5Qe%WfE?}L(avX)x|;&QM&9S%SWD>8%5f9?*0@_ zso}73&$%JGB$LKT%~BkTu&{+{y1lj)?%E2MMMTQ#xM&r|WptDXv>P|+%gA_7VT~F^ zR75s~)N3|%{WZOrNDqur9o5`w9b4|GsywiF_0-Xk3NSY;mG3zwcRH>Em*^8hJ(C=Z zFhaIkRpn{dw6uI~T7{_tJuS3Kd^|%FSH1K5l%*@QfAo%QnyumOFA3YENckLUCbjKK z^5gr5NF=TI_BoRy?5kOH^0*`rB9(?U6Cpqtnoy1`9xm^n_GreHu`+sewzYQ`UUitz z4b$sqqG&CB_(G;%>eE=+70fV;l7@Sx3Xabrj&0!8W%^g!h0yVWjps^s>0P&2@cv@E=#@GBAc0 z|5}mNvPO>6!Ko}8W|+tgijf?i;dXd65(I@=&1e}Qw!=hRM^?{nBCnCPpEJ1PZmZw_ zJrs=_JIKJ2#+m`*#>*OF$O{=I5nBo)BV6qo>O#tu+=`&IngAak%-}gz_=OWS(Zy7# zAdyb#LQ;~2Kv+Y2pbKs=#So7R--H%SLMtI3ZEiLg5cU!4T_a9MnmY}eL6{fMg*-*5vz?t#-}CjV15kgaEow;A57xuW0DD3%`*s1tZ!B2=XRu4v|#400EF4GFI-49XkoeM_ZO!0HMi1UgB7PLz2Z3R5BJ$ zOP3xZAmBS>)euevgk#SgkE0I_$w9EVY&^K0lWwseNGWSRQRX`Erm(kY&k5rU8Wf;u z{x>@BpB{cGIJqd9U7l81lDcCRJFKierG)2!-K{6gS=$qJ`PnpiQ53aARIcE4ZV8du zp1ZBLP*%{40y9Ss`S!@9qD#}ndq`V%ZDUbgZm+)`Y5~Z#=ru1@7XUplZMN`3v=mHN zB(_MO-&w>HIVBu)%B&e;A?hGW!CV`mbZ!0;>Mm!WMUdJ)4fhQQS|$U?inx~Ux%pB! z!gQb>+BpLF6Q6}Qbc!c@pKmhQm@BcEBwTc6&T9_3B^#nj)0^E2j1*!#1!62aK3bVb zJS)&l9CA6TEawZcWZ6fur2@GOqp0I%QOX!QHjF^HX`Yx^t`>hjX@SH=aZKcS>)Kr7 zH^_evIZ}>c(*D0e;tkY){u_14@t+|lOVgI5&3 zb5Ol^m7%lwkMGB4`Kp*j{1C55)3jSrWi6NKao8nk#E^mZx3bsk5TEx;gzx)N4X*Fk z6P&K^&y%aK_owtnOpNc#Mvw1j3!U%#LCT4)&)Y&ukJrz^i>|NR>q_M{rpZ;tLyDx2B^bB%ckkKepxE3a+ia=+MO<#wZm zV>VApBcq~>*hdlU%YRxvhkrx2{9}36m&kp5KU=f)of#`qjOijz6>oxOnA+YLNj0uA zn!--BKD-Ks4?W|>*1WUt-~LTAgJVsY$W4_YnW*R&UsiP_ld3|D)Vx)ERWw?6_eFb{ z+J10HvZM#WB|-}h<~p&f*npSiJZ-||`Dl;Wq&My{N=viBO7qbTY&J79hjOM?C^5{(2+q26PSQD@r|4T0AJ=8j zeKEsGv&CF2!tgu_bFzFqG+3ME>0Xmd{uFBm=g-C0W~>|6ww&UKYYe=UF)mL}oPDjy zr0A<_h_g-Cl4*8_J~1{m*IGjDpK0DH7H2J6&+aikUbH$LEIMCsI!#eZUKD9R|6aJ1 zm=FGD-Dv8^em!HqgXjdMSp{eWF%D@8@Lpwe5{M1kob7H%Nl;6?^eg6c?9D?9G1dHS zfwo+b9_XK2(M>nLes@0)byg2WC1ltboTX3%h+cbZpd1mc)!k!8T~;w zHFIK(65@Kv+GD9)#J{eS+&0ZloGO9yoGv~RA-VW4&KhcH;L99t%kb=Gbq*UeIT=hp zxwI0LY_hb3`bv0c8TGo4GnK%UZ#?kINsr7|T%e6GEAxzFV#7B5=arpaglGLUcKp$E zcSs~qpAYI{;3izr_&Bv`06LU#6KXC&HuJ^{hi7(wr(;p#V!kXsgGHv&nl!efMVi=# z;ar`2;8_$g0skBL9+^KymUk`5fVly4^C)+dYat_d!(>Z4kJ?0uVUV1ycsDr+e_%Xd zq1JqAo1C1ms!#3_b_?lJj$SJ9(U1_sngHL96+hKTy~WH5!qUR*-6ML=qk(H@K``OL z9M_z);x0mS#?^1UU@YB(Tw&cc8=f?%G0dEuQLT#?I0}`eCcUL` zw*DuzfF;R+4G#aHVN!UfdEKHE*W4kmTDvx_5Le|DJ)2o9jSdfayH2u?ZM1Wh z&C=#OHTP0|d{_KOCDincn@>rpC(~NYq@jkhPT-;dzD}UiRtLuuE6m;|JrBeShtxfJ zt{a$4yA&hrNc%|kKW$RR4>gJ*yxP*@bb6XBk$6`apRP%mI;~@uhl?l&VP|+wPr
  1. FMZB2L(}4PFN(jl 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 Date: Wed, 1 Oct 2025 15:01:29 +0300 Subject: [PATCH 3/4] feat(setup): Add first setup firmware (#10) Initialized first firmware setup --- firmware/.cargo/config.toml | 9 +- firmware/Cargo.lock | 983 +++++++++++++++++++++++++++++-- firmware/Cargo.toml | 123 ++-- firmware/build.rs | 36 ++ firmware/crates/at/Cargo.toml | 22 - firmware/crates/at/src/lib.rs | 3 - firmware/crates/core/Cargo.toml | 22 - firmware/crates/core/src/lib.rs | 3 - firmware/crates/dds/Cargo.toml | 24 - firmware/crates/dds/src/lib.rs | 3 - firmware/crates/fsm/Cargo.toml | 22 - firmware/crates/fsm/src/lib.rs | 3 - firmware/crates/main/Cargo.toml | 42 -- firmware/crates/main/src/main.rs | 43 -- firmware/crates/nvc/Cargo.toml | 22 - firmware/crates/nvc/src/lib.rs | 3 - firmware/crates/rgb/Cargo.toml | 22 - firmware/crates/rgb/src/lib.rs | 3 - firmware/crates/usb/Cargo.toml | 28 - firmware/crates/usb/src/lib.rs | 118 ---- firmware/memory.x | 30 +- firmware/src/main.rs | 36 ++ firmware/src/usb/mod.rs | 59 ++ 23 files changed, 1147 insertions(+), 512 deletions(-) create mode 100644 firmware/build.rs delete mode 100644 firmware/crates/at/Cargo.toml delete mode 100644 firmware/crates/at/src/lib.rs delete mode 100644 firmware/crates/core/Cargo.toml delete mode 100644 firmware/crates/core/src/lib.rs delete mode 100644 firmware/crates/dds/Cargo.toml delete mode 100644 firmware/crates/dds/src/lib.rs delete mode 100644 firmware/crates/fsm/Cargo.toml delete mode 100644 firmware/crates/fsm/src/lib.rs delete mode 100644 firmware/crates/main/Cargo.toml delete mode 100644 firmware/crates/main/src/main.rs delete mode 100644 firmware/crates/nvc/Cargo.toml delete mode 100644 firmware/crates/nvc/src/lib.rs delete mode 100644 firmware/crates/rgb/Cargo.toml delete mode 100644 firmware/crates/rgb/src/lib.rs delete mode 100644 firmware/crates/usb/Cargo.toml delete mode 100644 firmware/crates/usb/src/lib.rs create mode 100644 firmware/src/main.rs create mode 100644 firmware/src/usb/mod.rs diff --git a/firmware/.cargo/config.toml b/firmware/.cargo/config.toml index 682b610..6d01da5 100644 --- a/firmware/.cargo/config.toml +++ b/firmware/.cargo/config.toml @@ -1,6 +1,9 @@ +[target.'cfg(all(target_arch = "arm", target_os = "none"))'] +runner = "probe-rs run --chip RP2040" + [build] target-dir = "target" -target = "thumbv6m-none-eabi" +target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+ -[target.thumbv6m-none-eabi] -rustflags = ["-C", "link-arg=-Tlink.x", "-C", "link-arg=--gc-sections"] +[env] +DEFMT_LOG = "debug" diff --git a/firmware/Cargo.lock b/firmware/Cargo.lock index 3a3d4c5..dead682 100644 --- a/firmware/Cargo.lock +++ b/firmware/Cargo.lock @@ -2,6 +2,41 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array 0.14.7", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + [[package]] name = "ahash" version = "0.8.12" @@ -29,6 +64,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "as-slice" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45403b49e3954a4b8428a0ac21a4b7afadccf92bfd96273f1a58cd4812496ae0" +dependencies = [ + "generic-array 0.12.4", + "generic-array 0.13.3", + "generic-array 0.14.7", + "stable_deref_trait", +] + [[package]] name = "ascii-canvas" version = "4.0.0" @@ -39,8 +86,9 @@ dependencies = [ ] [[package]] -name = "at" -version = "0.1.0" +name = "assign-resources" +version = "0.4.0" +source = "git+https://github.com/adamgreig/assign-resources?rev=bd22cb7a92031fb16f74a5da42469d466c33383e#bd22cb7a92031fb16f74a5da42469d466c33383e" [[package]] name = "atomic-polyfill" @@ -72,6 +120,18 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "bit-set" version = "0.8.0" @@ -117,9 +177,49 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array", + "generic-array 0.14.7", +] + +[[package]] +name = "bt-hci" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a496a585c0e2e00195e558af18342f79afd67598d3edb32e78c006e606a31386" +dependencies = [ + "btuuid", + "defmt 1.0.1", + "embassy-sync", + "embedded-io", + "embedded-io-async", + "futures-intrusive", + "heapless 0.8.0", +] + +[[package]] +name = "btuuid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0acfef8a77a02866e04f7e2ad3f4c7b32d575696c49c4bbad742b4aecb8e4a3" +dependencies = [ + "defmt 0.3.100", +] + +[[package]] +name = "buffered-io" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5698b2eda4613b62f3aa3119805df1ca6739e00167a2600b3a234ac49b14803" +dependencies = [ + "embedded-io", + "embedded-io-async", ] +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + [[package]] name = "bytemuck" version = "1.23.2" @@ -138,6 +238,16 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "codespan-reporting" version = "0.11.1" @@ -149,8 +259,10 @@ dependencies = [ ] [[package]] -name = "core" -version = "0.1.0" +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "cortex-m" @@ -214,16 +326,70 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array", + "generic-array 0.14.7", "typenum", ] +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "cyw43" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85d050df7c6c6d253d1044fd5f011873ec6f434f77c202e7e7e88d5b12a1e943" +dependencies = [ + "bt-hci", + "cortex-m", + "cortex-m-rt", + "defmt 1.0.1", + "embassy-futures", + "embassy-net-driver-channel", + "embassy-sync", + "embassy-time", + "embedded-hal 1.0.0", + "embedded-io-async", + "futures", + "heapless 0.8.0", + "num_enum 0.5.11", +] + +[[package]] +name = "cyw43-pio" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86bd7dea4d32a73557be29bfadaaa916e758115ed8b42cfca4fda0a111f07644" +dependencies = [ + "cyw43", + "defmt 1.0.1", + "embassy-rp", + "fixed", +] + [[package]] name = "darling" version = "0.20.11" @@ -259,16 +425,21 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "dds" -version = "0.1.0" - [[package]] name = "debug-helper" version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e" +[[package]] +name = "defmt" +version = "0.3.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0963443817029b2024136fc4dd07a5107eb8f977eaf18fcd1fdeb11306b64ad" +dependencies = [ + "defmt 1.0.1", +] + [[package]] name = "defmt" version = "1.0.1" @@ -308,7 +479,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2cac3b8a5644a9e02b75085ebad3b6deafdbdbdec04bb25086523828aa4dfd1" dependencies = [ "critical-section", - "defmt", + "defmt 1.0.1", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "zeroize", ] [[package]] @@ -319,6 +500,25 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", + "subtle", +] + +[[package]] +name = "display-interface" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba2aab1ef3793e6f7804162debb5ac5edb93b3d650fbcc5aeb72fcd0e6c03a0" + +[[package]] +name = "display-interface-spi" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f86b9ec30048b1955da2038fcc3c017f419ab21bb0001879d16c0a3749dc6b7a" +dependencies = [ + "byte-slice-cast", + "display-interface", + "embedded-hal 1.0.0", + "embedded-hal-async", ] [[package]] @@ -336,12 +536,32 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array 0.14.7", + "group", + "hkdf", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "embassy-embedded-hal" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "554e3e840696f54b4c9afcf28a0f24da431c927f4151040020416e7393d6d0d8" dependencies = [ + "defmt 1.0.1", "embassy-futures", "embassy-hal-internal", "embassy-sync", @@ -361,6 +581,7 @@ checksum = "06070468370195e0e86f241c8e5004356d696590a678d47d6676795b2e439c6b" dependencies = [ "cortex-m", "critical-section", + "defmt 1.0.1", "document-features", "embassy-executor-macros", "embassy-executor-timer-queue", @@ -398,14 +619,36 @@ checksum = "95285007a91b619dc9f26ea8f55452aa6c60f7115a4edc05085cd2bd3127cd7a" dependencies = [ "cortex-m", "critical-section", + "defmt 1.0.1", "num-traits", ] +[[package]] +name = "embassy-net" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0558a231a47e7d4a06a28b5278c92e860f1200f24821d2f365a2f40fe3f3c7b2" +dependencies = [ + "defmt 1.0.1", + "document-features", + "embassy-net-driver", + "embassy-sync", + "embassy-time", + "embedded-io-async", + "embedded-nal-async", + "heapless 0.8.0", + "managed", + "smoltcp", +] + [[package]] name = "embassy-net-driver" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524eb3c489760508f71360112bca70f6e53173e6fe48fc5f0efd0f5ab217751d" +dependencies = [ + "defmt 0.3.100", +] [[package]] name = "embassy-net-driver-channel" @@ -418,6 +661,20 @@ dependencies = [ "embassy-sync", ] +[[package]] +name = "embassy-net-wiznet" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3035678b1fcb8322bbcc3ee9a32ea3ed04e6e388528057abd11ee8382a63abdf" +dependencies = [ + "defmt 1.0.1", + "embassy-futures", + "embassy-net-driver-channel", + "embassy-time", + "embedded-hal 1.0.0", + "embedded-hal-async", +] + [[package]] name = "embassy-rp" version = "0.8.0" @@ -429,6 +686,7 @@ dependencies = [ "cortex-m", "cortex-m-rt", "critical-section", + "defmt 1.0.1", "document-features", "embassy-embedded-hal", "embassy-futures", @@ -465,10 +723,11 @@ checksum = "73974a3edbd0bd286759b3d483540f0ebef705919a5f56f4fc7709066f71689b" dependencies = [ "cfg-if", "critical-section", + "defmt 1.0.1", "embedded-io-async", "futures-core", "futures-sink", - "heapless", + "heapless 0.8.0", ] [[package]] @@ -479,6 +738,7 @@ checksum = "f4fa65b9284d974dad7a23bb72835c4ec85c0b540d86af7fc4098c88cff51d65" dependencies = [ "cfg-if", "critical-section", + "defmt 1.0.1", "document-features", "embassy-time-driver", "embedded-hal 0.2.7", @@ -503,7 +763,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80e2ee86063bd028a420a5fb5898c18c87a8898026da1d4c852af2c443d0a454" dependencies = [ "embassy-executor-timer-queue", - "heapless", + "heapless 0.8.0", ] [[package]] @@ -512,12 +772,13 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc4462e48b19a4f401a11901bdd981aab80c6a826608016a0bdc73cbbab31954" dependencies = [ + "defmt 1.0.1", "embassy-futures", "embassy-net-driver-channel", "embassy-sync", "embassy-usb-driver", "embedded-io-async", - "heapless", + "heapless 0.8.0", "ssmarshal", "usbd-hid", ] @@ -528,9 +789,45 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17119855ccc2d1f7470a39756b12068454ae27a3eabb037d940b5c03d9c77b7a" dependencies = [ + "defmt 1.0.1", "embedded-io-async", ] +[[package]] +name = "embassy-usb-logger" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deed6d36715838d6adbbff13b215b03a9deeaa66a64d5fccd6353708ccfb8b8f" +dependencies = [ + "embassy-futures", + "embassy-sync", + "embassy-usb", + "log", +] + +[[package]] +name = "embedded-graphics" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0649998afacf6d575d126d83e68b78c0ab0e00ca2ac7e9b3db11b4cbe8274ef0" +dependencies = [ + "az", + "byteorder", + "embedded-graphics-core", + "float-cmp", + "micromath", +] + +[[package]] +name = "embedded-graphics-core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba9ecd261f991856250d2207f6d8376946cd9f412a2165d3b75bc87a0bc7a044" +dependencies = [ + "az", + "byteorder", +] + [[package]] name = "embedded-hal" version = "0.2.7" @@ -556,6 +853,17 @@ dependencies = [ "embedded-hal 1.0.0", ] +[[package]] +name = "embedded-hal-bus" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "513e0b3a8fb7d3013a8ae17a834283f170deaf7d0eeab0a7c1a36ad4dd356d22" +dependencies = [ + "critical-section", + "embedded-hal 1.0.0", + "embedded-hal-async", +] + [[package]] name = "embedded-hal-nb" version = "1.0.0" @@ -571,6 +879,9 @@ name = "embedded-io" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" +dependencies = [ + "defmt 0.3.100", +] [[package]] name = "embedded-io-async" @@ -578,7 +889,40 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f" dependencies = [ + "defmt 0.3.100", + "embedded-io", +] + +[[package]] +name = "embedded-nal" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56a28be191a992f28f178ec338a0bf02f63d7803244add736d026a471e6ed77" +dependencies = [ + "nb 1.1.0", +] + +[[package]] +name = "embedded-nal-async" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76959917cd2b86f40a98c28dd5624eddd1fa69d746241c8257eac428d83cb211" +dependencies = [ + "embedded-io-async", + "embedded-nal", +] + +[[package]] +name = "embedded-sdmmc" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce3c7f9ea039eeafc4a49597b7bd5ae3a1c8e51b2803a381cb0f29ce90fe1ec6" +dependencies = [ + "byteorder", + "embedded-hal 1.0.0", "embedded-io", + "heapless 0.8.0", + "log", ] [[package]] @@ -596,6 +940,29 @@ dependencies = [ "embedded-storage", ] +[[package]] +name = "embedded-tls" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6efb76fdd004a4ef787640177237b83449e6c5847765ea50bf15900061fd601" +dependencies = [ + "aes-gcm", + "atomic-polyfill", + "defmt 0.3.100", + "digest", + "embedded-io", + "embedded-io-async", + "generic-array 0.14.7", + "heapless 0.6.1", + "heapless 0.8.0", + "hkdf", + "hmac", + "p256", + "rand_core 0.6.4", + "sha2", + "typenum", +] + [[package]] name = "ena" version = "0.14.3" @@ -617,6 +984,16 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "fixed" version = "1.29.0" @@ -629,12 +1006,56 @@ dependencies = [ "typenum", ] +[[package]] +name = "fixed-macro" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0c48af8cb14e02868f449f8a2187bd78af7a08da201fdc78d518ecb1675bc" +dependencies = [ + "fixed", + "fixed-macro-impl", + "fixed-macro-types", +] + +[[package]] +name = "fixed-macro-impl" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c93086f471c0a1b9c5e300ea92f5cd990ac6d3f8edf27616ef624b8fa6402d4b" +dependencies = [ + "fixed", + "paste", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "fixed-macro-types" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "044a61b034a2264a7f65aa0c3cd112a01b4d4ee58baace51fead3f21b993c7e4" +dependencies = [ + "fixed", + "fixed-macro-impl", +] + [[package]] name = "fixedbitset" version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +dependencies = [ + "num-traits", +] + [[package]] name = "fnv" version = "1.0.7" @@ -642,8 +1063,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] -name = "fsm" -version = "0.1.0" +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] [[package]] name = "futures-core" @@ -651,20 +1092,107 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "futures-sink" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-macro", + "futures-sink", + "futures-task", + "pin-project-lite", + "pin-utils", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309" +dependencies = [ + "typenum", +] + [[package]] name = "generic-array" version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "typenum", - "version_check", + "ff", + "rand_core 0.6.4", + "subtle", ] [[package]] @@ -677,6 +1205,15 @@ dependencies = [ "crunchy", ] +[[package]] +name = "hash32" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4041af86e63ac4298ce40e5cca669066e75b6f1aa3390fe2561ffa5e1d9f4cc" +dependencies = [ + "byteorder", +] + [[package]] name = "hash32" version = "0.3.1" @@ -701,16 +1238,118 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +[[package]] +name = "heapless" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634bd4d29cbf24424d0a4bfcbf80c6960129dc24424752a7d1d1390607023422" +dependencies = [ + "as-slice", + "generic-array 0.14.7", + "hash32 0.1.1", + "stable_deref_trait", +] + [[package]] name = "heapless" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" dependencies = [ - "hash32", + "defmt 0.3.100", + "hash32 0.3.1", + "serde", + "stable_deref_trait", +] + +[[package]] +name = "heapless" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1edcd5a338e64688fbdcb7531a846cfd3476a54784dcb918a0844682bc7ada5" +dependencies = [ + "hash32 0.3.1", "stable_deref_trait", ] +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hexagenmini" +version = "0.1.0" +dependencies = [ + "assign-resources", + "byte-slice-cast", + "cortex-m", + "cortex-m-rt", + "critical-section", + "cyw43", + "cyw43-pio", + "defmt 1.0.1", + "defmt-rtt", + "display-interface", + "display-interface-spi", + "embassy-embedded-hal", + "embassy-executor", + "embassy-futures", + "embassy-net", + "embassy-net-wiznet", + "embassy-rp", + "embassy-sync", + "embassy-time", + "embassy-usb", + "embassy-usb-logger", + "embedded-graphics", + "embedded-hal 1.0.0", + "embedded-hal-async", + "embedded-hal-bus", + "embedded-io-async", + "embedded-sdmmc", + "embedded-storage", + "fixed", + "fixed-macro", + "heapless 0.9.1", + "log", + "mipidsi", + "panic-probe", + "portable-atomic", + "rand", + "reqwless", + "serde", + "serde-json-core", + "smart-leds", + "static_cell", + "usbd-hid", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + [[package]] name = "ident_case" version = "1.0.1" @@ -727,6 +1366,15 @@ dependencies = [ "hashbrown 0.16.0", ] +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array 0.14.7", +] + [[package]] name = "itertools" version = "0.14.0" @@ -736,12 +1384,6 @@ dependencies = [ "either", ] -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - [[package]] name = "keccak" version = "0.1.5" @@ -812,26 +1454,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] -name = "main" -version = "0.1.0" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "defmt", - "defmt-rtt", - "embassy-executor", - "embassy-rp", - "embassy-sync", - "embassy-time", - "embassy-usb", - "embedded-hal 1.0.0", - "itoa", - "panic-probe", - "portable-atomic", - "rp2040-boot2", - "static_cell", - "usb", -] +name = "managed" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" [[package]] name = "memchr" @@ -839,6 +1465,24 @@ version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +[[package]] +name = "micromath" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c8dda44ff03a2f238717214da50f65d5a53b45cd213a7370424ffdb6fae815" + +[[package]] +name = "mipidsi" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ba34dcbf61182ffa6992b5a4d9b566d5a99df127fd93f6d314213347329e92f" +dependencies = [ + "embedded-graphics-core", + "embedded-hal 1.0.0", + "heapless 0.8.0", + "nb 1.1.0", +] + [[package]] name = "nb" version = "0.1.3" @@ -860,6 +1504,15 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +[[package]] +name = "nourl" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa07b0722c63805057dec824444fdc814bdfd30d1c782a3a8f63bbcf67c4ed1c" +dependencies = [ + "defmt 0.3.100", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -869,16 +1522,36 @@ dependencies = [ "autocfg", ] +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive 0.5.11", +] + [[package]] name = "num_enum" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" dependencies = [ - "num_enum_derive", + "num_enum_derive 0.7.4", "rustversion", ] +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "num_enum_derive" version = "0.7.4" @@ -890,16 +1563,28 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "nvc" -version = "0.1.0" - [[package]] name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "elliptic-curve", + "primeorder", +] + [[package]] name = "panic-probe" version = "1.0.0" @@ -907,7 +1592,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd402d00b0fb94c5aee000029204a46884b1262e0c443f166d86d2c0747e1a1a" dependencies = [ "cortex-m", - "defmt", + "defmt 1.0.1", ] [[package]] @@ -964,6 +1649,18 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pio" version = "0.3.0" @@ -981,7 +1678,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61d90fddc3d67f21bbf93683bc461b05d6a29c708caf3ffb79947d7ff7095406" dependencies = [ "arrayvec", - "num_enum", + "num_enum 0.7.4", "paste", ] @@ -1012,6 +1709,18 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "portable-atomic" version = "1.11.1" @@ -1021,12 +1730,54 @@ dependencies = [ "critical-section", ] +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + [[package]] name = "precomputed-hash" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + [[package]] name = "proc-macro-error-attr2" version = "2.0.0" @@ -1067,6 +1818,25 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + [[package]] name = "rand_core" version = "0.6.4" @@ -1118,8 +1888,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] -name = "rgb" -version = "0.1.0" +name = "reqwless" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb1be74cb817fa6dbda417110f575d9b9ad5488817f1eb65f2f6468fe6d5d663" +dependencies = [ + "base64", + "buffered-io", + "defmt 0.3.100", + "embedded-io", + "embedded-io-async", + "embedded-nal-async", + "embedded-tls", + "heapless 0.8.0", + "hex", + "httparse", + "nourl", + "rand_chacha", + "rand_core 0.6.4", +] [[package]] name = "rgb" @@ -1164,6 +1951,12 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + [[package]] name = "same-file" version = "1.0.6" @@ -1179,6 +1972,19 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.7", + "subtle", + "zeroize", +] + [[package]] name = "semver" version = "0.9.0" @@ -1201,6 +2007,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80ece43fc6fbed4eb5392ab50c07334d3e577cbf40997ee896fe7af40bba4245" dependencies = [ "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-json-core" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b81787e655bd59cecadc91f7b6b8651330b2be6c33246039a65e5cd6f4e0828" +dependencies = [ + "heapless 0.8.0", + "ryu", + "serde", ] [[package]] @@ -1223,6 +2041,17 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sha2-const-stable" version = "0.1.0" @@ -1266,7 +2095,21 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edeb89c73244414bb0568611690dd095b2358b3fda5bae65ad784806cca00157" dependencies = [ - "rgb 0.8.52", + "rgb", +] + +[[package]] +name = "smoltcp" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dad095989c1533c1c266d9b1e8d70a1329dd3723c3edac6d03bbd67e7bf6f4bb" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "cfg-if", + "defmt 0.3.100", + "heapless 0.8.0", + "managed", ] [[package]] @@ -1312,6 +2155,12 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "1.0.109" @@ -1397,15 +2246,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] -name = "usb" -version = "0.1.0" +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ - "defmt", - "embassy-executor", - "embassy-rp", - "embassy-time", - "embassy-usb", - "static_cell", + "crypto-common", + "subtle", ] [[package]] @@ -1414,7 +2261,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98816b1accafbb09085168b90f27e93d790b4bfa19d883466b5e53315b5f06a6" dependencies = [ - "heapless", + "heapless 0.8.0", "portable-atomic", ] @@ -1599,3 +2446,9 @@ dependencies = [ "quote", "syn 2.0.106", ] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/firmware/Cargo.toml b/firmware/Cargo.toml index cc2a52d..e516b41 100644 --- a/firmware/Cargo.toml +++ b/firmware/Cargo.toml @@ -1,71 +1,104 @@ # SPDX-FileCopyrightText: 2025 hexaTune LLC # SPDX-License-Identifier: MIT -[workspace] -members = [ - "crates/at", - "crates/dds", - "crates/fsm", - "crates/rgb", - "crates/usb", - "crates/nvc", - "crates/core", - "crates/main", -] -resolver = "2" - -[workspace.package] +[package] +name = "hexagenmini" +description = "Main domain - orchestrates all other domains and hardware interaction" version = "0.1.0" authors = ["Husamettin ARABACI "] edition = "2024" license = "MIT" license-file = "LICENSE" repository = "https://github.com/hTuneSys/hexaGenMini" -description = "Modular firmware with event-driven architecture for hexaGenMini." homepage = "https://hexatune.com" keywords = ["rust", "firmware", "event-driven", "embedded", "hexaGenMini"] categories = ["embedded", "development-tools", "hardware-support"] rust-version = "1.86.0" -[workspace.dependencies] -# Embedded/board -embedded-hal = "1" -cortex-m = { version = "0.7" } -cortex-m-rt = "0.7" -rp2040-boot2 = "0.3" -itoa = "1" -defmt = "1.0.1" -defmt-rtt = "1.0.0" -panic-probe = { version = "1.0", features = ["print-defmt"] } +[[bin]] +name = "hexagenmini" +path = "src/main.rs" +test = false +bench = false -# Embassy multitasking -embassy-executor = { version = "0.9", features = [ +[dependencies] +embassy-embedded-hal = { version = "0.5.0", features = ["defmt"] } +embassy-sync = { version = "0.7.2", features = ["defmt"] } +embassy-executor = { version = "0.9.0", features = [ "arch-cortex-m", "executor-thread", + "executor-interrupt", + "defmt", ] } -embassy-usb = "0.5" -embassy-time = "0.5" -embassy-rp = { version = "0.8", features = [ - "rp2040", +embassy-time = { version = "0.5.0", features = [ + "defmt", + "defmt-timestamp-uptime", +] } +embassy-rp = { version = "0.8.0", features = [ + "defmt", + "unstable-pac", "time-driver", "critical-section-impl", + "rp2040", ] } -embassy-sync = "0.7" +embassy-usb = { version = "0.5.1", features = ["defmt"] } +embassy-net = { version = "0.7.1", features = [ + "defmt", + "icmp", + "tcp", + "udp", + "raw", + "dhcpv4", + "medium-ethernet", + "dns", + "proto-ipv4", + "proto-ipv6", + "multicast", +] } +embassy-net-wiznet = { version = "0.2.1", features = ["defmt"] } +embassy-futures = { version = "0.1.2" } +embassy-usb-logger = { version = "0.5.1" } +cyw43 = { version = "0.5.0", features = ["defmt", "firmware-logs"] } +cyw43-pio = { version = "0.8.0", features = ["defmt"] } + +defmt = "1.0.1" +defmt-rtt = "1.0.0" +fixed = "1.23.1" +fixed-macro = "1.2" + +# for web request example +reqwless = { version = "0.13.0", features = ["defmt"] } +serde = { version = "1.0.203", default-features = false, features = ["derive"] } +serde-json-core = "0.6.0" + +# for assign resources example +assign-resources = { git = "https://github.com/adamgreig/assign-resources", rev = "bd22cb7a92031fb16f74a5da42469d466c33383e" } -static_cell = "2" -portable-atomic = { version = "1.11", features = ["critical-section"] } +#cortex-m = { version = "0.7.6", features = ["critical-section-single-core"] } +cortex-m = { version = "0.7.6", features = ["inline-asm"] } +cortex-m-rt = "0.7.0" +critical-section = "1.1" +panic-probe = { version = "1.0.0", features = ["print-defmt"] } +display-interface-spi = "0.5.0" +embedded-graphics = "0.8.1" +mipidsi = "0.9.0" +display-interface = "0.5.0" +byte-slice-cast = { version = "1.2.0", default-features = false } +smart-leds = "0.4.0" +heapless = "0.9.1" +usbd-hid = "0.8.1" -# Internal dependencies -at = { path = "crates/at" } -dds = { path = "crates/dds" } -fsm = { path = "crates/fsm" } -rgb = { path = "crates/rgb" } -usb = { path = "crates/usb" } -nvc = { path = "crates/nvc" } -core = { path = "crates/core" } -main = { path = "crates/main" } +embedded-hal-1 = { package = "embedded-hal", version = "1.0" } +embedded-hal-async = "1.0" +embedded-hal-bus = { version = "0.3", features = ["async"] } +embedded-io-async = { version = "0.6.1", features = ["defmt-03"] } +embedded-storage = { version = "0.3" } +static_cell = "2.1" +portable-atomic = { version = "1.5", features = ["critical-section"] } +log = "0.4" +rand = { version = "0.9.0", default-features = false } +embedded-sdmmc = "0.9.0" [profile.release] -codegen-units = 1 +# Enable generation of debug symbols even on release builds debug = true -lto = true diff --git a/firmware/build.rs b/firmware/build.rs new file mode 100644 index 0000000..3f915f9 --- /dev/null +++ b/firmware/build.rs @@ -0,0 +1,36 @@ +//! This build script copies the `memory.x` file from the crate root into +//! a directory where the linker can always find it at build time. +//! For many projects this is optional, as the linker always searches the +//! project root directory -- wherever `Cargo.toml` is. However, if you +//! are using a workspace or have a more complicated build setup, this +//! build script becomes required. Additionally, by requesting that +//! Cargo re-run the build script whenever `memory.x` is changed, +//! updating `memory.x` ensures a rebuild of the application with the +//! new memory settings. + +use std::env; +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; + +fn main() { + // Put `memory.x` in our output directory and ensure it's + // on the linker search path. + let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); + File::create(out.join("memory.x")) + .unwrap() + .write_all(include_bytes!("memory.x")) + .unwrap(); + println!("cargo:rustc-link-search={}", out.display()); + + // By default, Cargo will re-run a build script whenever + // any file in the project changes. By specifying `memory.x` + // here, we ensure the build script is only re-run when + // `memory.x` is changed. + println!("cargo:rerun-if-changed=memory.x"); + + println!("cargo:rustc-link-arg-bins=--nmagic"); + println!("cargo:rustc-link-arg-bins=-Tlink.x"); + println!("cargo:rustc-link-arg-bins=-Tlink-rp.x"); + println!("cargo:rustc-link-arg-bins=-Tdefmt.x"); +} diff --git a/firmware/crates/at/Cargo.toml b/firmware/crates/at/Cargo.toml deleted file mode 100644 index 32bba5b..0000000 --- a/firmware/crates/at/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-FileCopyrightText: 2025 hexaTune LLC -# SPDX-License-Identifier: MIT - -[package] -name = "at" -description = "AT command domain - handles AT protocol parsing and execution" -version.workspace = true -authors.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -homepage.workspace = true -keywords.workspace = true -categories.workspace = true -rust-version.workspace = true - -[lib] -test = false -bench = false -doctest = false - -[dependencies] diff --git a/firmware/crates/at/src/lib.rs b/firmware/crates/at/src/lib.rs deleted file mode 100644 index c46885c..0000000 --- a/firmware/crates/at/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![no_std] - -pub mod lib {} diff --git a/firmware/crates/core/Cargo.toml b/firmware/crates/core/Cargo.toml deleted file mode 100644 index 350dcf1..0000000 --- a/firmware/crates/core/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-FileCopyrightText: 2025 hexaTune LLC -# SPDX-License-Identifier: MIT - -[package] -name = "core" -description = "Core domain - shared logic and types for hexaGenMini firmware" -version.workspace = true -authors.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -homepage.workspace = true -keywords.workspace = true -categories.workspace = true -rust-version.workspace = true - -[lib] -test = false -bench = false -doctest = false - -[dependencies] diff --git a/firmware/crates/core/src/lib.rs b/firmware/crates/core/src/lib.rs deleted file mode 100644 index c46885c..0000000 --- a/firmware/crates/core/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![no_std] - -pub mod lib {} diff --git a/firmware/crates/dds/Cargo.toml b/firmware/crates/dds/Cargo.toml deleted file mode 100644 index 48a7d49..0000000 --- a/firmware/crates/dds/Cargo.toml +++ /dev/null @@ -1,24 +0,0 @@ -# SPDX-FileCopyrightText: 2025 hexaTune LLC -# SPDX-License-Identifier: MIT - -[package] -name = "dds" -description = "DDS domain - handles direct digital synthesis operations" -version.workspace = true -authors.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -homepage.workspace = true -keywords.workspace = true -categories.workspace = true -rust-version.workspace = true - -[lib] -test = false -bench = false -doctest = false - -[dependencies] - -[dev-dependencies] diff --git a/firmware/crates/dds/src/lib.rs b/firmware/crates/dds/src/lib.rs deleted file mode 100644 index c46885c..0000000 --- a/firmware/crates/dds/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![no_std] - -pub mod lib {} diff --git a/firmware/crates/fsm/Cargo.toml b/firmware/crates/fsm/Cargo.toml deleted file mode 100644 index f9f52d3..0000000 --- a/firmware/crates/fsm/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-FileCopyrightText: 2025 hexaTune LLC -# SPDX-License-Identifier: MIT - -[package] -name = "fsm" -description = "FSM domain - handles finite state machine logic and transitions" -version.workspace = true -authors.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -homepage.workspace = true -keywords.workspace = true -categories.workspace = true -rust-version.workspace = true - -[lib] -test = false -bench = false -doctest = false - -[dependencies] diff --git a/firmware/crates/fsm/src/lib.rs b/firmware/crates/fsm/src/lib.rs deleted file mode 100644 index c46885c..0000000 --- a/firmware/crates/fsm/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![no_std] - -pub mod lib {} diff --git a/firmware/crates/main/Cargo.toml b/firmware/crates/main/Cargo.toml deleted file mode 100644 index dfc4e5d..0000000 --- a/firmware/crates/main/Cargo.toml +++ /dev/null @@ -1,42 +0,0 @@ -# SPDX-FileCopyrightText: 2025 hexaTune LLC -# SPDX-License-Identifier: MIT - -[package] -name = "main" -description = "Main domain - orchestrates all other domains and hardware interaction" -version.workspace = true -authors.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -homepage.workspace = true -keywords.workspace = true -categories.workspace = true -rust-version.workspace = true - -[[bin]] -name = "hexagenmini" -path = "src/main.rs" -test = false -bench = false - -[dependencies] -defmt = { workspace = true } -defmt-rtt = { workspace = true } -panic-probe = { workspace = true } -embedded-hal = { workspace = true } -cortex-m = { workspace = true } -cortex-m-rt = { workspace = true } -rp2040-boot2 = { workspace = true } -itoa = { workspace = true } -embassy-executor = { workspace = true } -embassy-time = { workspace = true } -embassy-rp = { workspace = true } -embassy-usb = { workspace = true } -embassy-sync = { workspace = true } -static_cell = { workspace = true } -portable-atomic = { workspace = true } - -usb = { workspace = true } - -[dev-dependencies] diff --git a/firmware/crates/main/src/main.rs b/firmware/crates/main/src/main.rs deleted file mode 100644 index 7f872d4..0000000 --- a/firmware/crates/main/src/main.rs +++ /dev/null @@ -1,43 +0,0 @@ -#![no_std] -#![no_main] - -use {defmt_rtt as _, panic_probe as _}; - -use embassy_executor::Spawner; -use embassy_time::{Duration, Timer}; - -use embassy_rp as rp; -use rp2040_boot2 as _; - -/// Minimal timestamp for `defmt` (optional). -#[unsafe(no_mangle)] -fn _defmt_timestamp() -> u64 { - 0 -} - -// Bind the USB interrupt (executor runs in thread mode; no SWI/TIMER IRQs here). -embassy_rp::bind_interrupts!(struct Irqs { - USBCTRL_IRQ => embassy_rp::usb::InterruptHandler; -}); - -/// Embassy entry point: set up USB CDC and tick once per second over USB. -#[embassy_executor::main] -async fn main(spawner: Spawner) { - // Initialize RP2040 (time driver is installed via "time-driver" feature). - let p = rp::init(Default::default()); - - // Build the Embassy RP USB driver in main. - let driver = rp::usb::Driver::new(p.USB, Irqs); - - // Build USB device + CDC class via the usb crate. - let usb::UsbCdc { device, cdc } = usb::init(driver); - - // Spawn the device runner and the 1 Hz ticker tasks. - spawner.spawn(usb::dev_task(device)).unwrap(); - spawner.spawn(usb::tick_task(cdc)).unwrap(); - - // Park the main task. - loop { - Timer::after(Duration::from_secs(3600)).await; - } -} diff --git a/firmware/crates/nvc/Cargo.toml b/firmware/crates/nvc/Cargo.toml deleted file mode 100644 index d9bb6b3..0000000 --- a/firmware/crates/nvc/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-FileCopyrightText: 2025 hexaTune LLC -# SPDX-License-Identifier: MIT - -[package] -name = "nvc" -description = "NVC (Non-Volatile Configuration) domain - manages non-volatile storage of configuration data" -version.workspace = true -authors.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -homepage.workspace = true -keywords.workspace = true -categories.workspace = true -rust-version.workspace = true - -[lib] -test = false -bench = false -doctest = false - -[dependencies] diff --git a/firmware/crates/nvc/src/lib.rs b/firmware/crates/nvc/src/lib.rs deleted file mode 100644 index c46885c..0000000 --- a/firmware/crates/nvc/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![no_std] - -pub mod lib {} diff --git a/firmware/crates/rgb/Cargo.toml b/firmware/crates/rgb/Cargo.toml deleted file mode 100644 index b712850..0000000 --- a/firmware/crates/rgb/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-FileCopyrightText: 2025 hexaTune LLC -# SPDX-License-Identifier: MIT - -[package] -name = "rgb" -description = "RGB domain - handles RGB LED control and effects" -version.workspace = true -authors.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -homepage.workspace = true -keywords.workspace = true -categories.workspace = true -rust-version.workspace = true - -[lib] -test = false -bench = false -doctest = false - -[dependencies] diff --git a/firmware/crates/rgb/src/lib.rs b/firmware/crates/rgb/src/lib.rs deleted file mode 100644 index c46885c..0000000 --- a/firmware/crates/rgb/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![no_std] - -pub mod lib {} diff --git a/firmware/crates/usb/Cargo.toml b/firmware/crates/usb/Cargo.toml deleted file mode 100644 index 9b11775..0000000 --- a/firmware/crates/usb/Cargo.toml +++ /dev/null @@ -1,28 +0,0 @@ -# SPDX-FileCopyrightText: 2025 hexaTune LLC -# SPDX-License-Identifier: MIT - -[package] -name = "usb" -description = "USB domain - handles USB communication and protocols" -version.workspace = true -authors.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -homepage.workspace = true -keywords.workspace = true -categories.workspace = true -rust-version.workspace = true - -[lib] -test = false -bench = false -doctest = false - -[dependencies] -defmt = { workspace = true } -embassy-executor = { workspace = true } -embassy-time = { workspace = true } -embassy-rp = { workspace = true } -embassy-usb = { workspace = true } -static_cell = { workspace = true } diff --git a/firmware/crates/usb/src/lib.rs b/firmware/crates/usb/src/lib.rs deleted file mode 100644 index 29a1933..0000000 --- a/firmware/crates/usb/src/lib.rs +++ /dev/null @@ -1,118 +0,0 @@ -#![no_std] - -//! USB (Embassy) for RP2040: CDC-ACM device with a 1 Hz "tick" task. -//! -//! This crate builds the Embassy USB CDC class and exposes ready-to-spawn tasks. -//! -//! Usage from `main` crate (sketch): -//! ```rust -//! use embassy_rp as rp; -//! use embassy_rp::peripherals; -//! -//! // 1) Bind USB IRQ in main (or wherever you own the peripherals): -//! embassy_rp::bind_interrupts!(struct Irqs { -//! USBCTRL_IRQ => rp::usb::InterruptHandler; -//! }); -//! -//! // 2) After rp::init(...): -//! let p = rp::init(Default::default()); -//! let driver = rp::usb::Driver::new(p.USB, Irqs); -//! -//! // 3) Build USB device & class inside this crate: -//! let usb::UsbCdc { device, cdc } = usb::init(driver); -//! -//! // 4) Spawn tasks: -//! spawner.spawn(usb::dev_task(device)).unwrap(); -//! spawner.spawn(usb::tick_task(cdc)).unwrap(); -//! ``` - -use embassy_time::{Duration, Timer}; - -use embassy_rp as rp; -use embassy_rp::peripherals; - -use embassy_usb::class::cdc_acm::{CdcAcmClass, State as CdcState}; -use embassy_usb::{Builder, Config as UsbConfig}; - -use static_cell::StaticCell; - -/// Concrete driver types exported so the tasks can be used by `main`. -pub type Driver<'d> = rp::usb::Driver<'d, peripherals::USB>; -pub type UsbDevice<'d> = embassy_usb::UsbDevice<'d, Driver<'d>>; -pub type Cdc<'d> = CdcAcmClass<'d, Driver<'d>>; - -/// Bundle holding the constructed USB device and CDC class instances. -pub struct UsbCdc { - pub device: UsbDevice<'static>, - pub cdc: Cdc<'static>, -} - -/// Build the Embassy USB CDC-ACM class and device **using a pre-built driver**. -/// -/// Pass a `rp::usb::Driver::new(p.USB, Irqs)` created in your `main` crate. -/// This avoids needing to import `Peripheral` traits here and works across SDK versions. -pub fn init(driver: Driver<'static>) -> UsbCdc { - // USB device configuration (adjust VID/PID/manufacturer/product as needed). - let mut cfg = UsbConfig::new(0x2E8A, 0x000A); // Raspberry Pi VID + CDC example PID - cfg.manufacturer = Some("hexaTune"); - cfg.product = Some("hexaGenMini CDC"); - cfg.serial_number = Some("HTS-0001"); - cfg.max_power = 100; // mA - cfg.max_packet_size_0 = 64; // EP0 size - - // With composite_with_iads (default), set IAD device class triple. - cfg.device_class = 0xEF; - cfg.device_sub_class = 0x02; - cfg.device_protocol = 0x01; - - // Descriptor/control buffers via StaticCell (Rust 2024-safe, no `static mut` refs). - static CONFIG_DESC_CELL: StaticCell<[u8; 256]> = StaticCell::new(); - static BOS_DESC_CELL: StaticCell<[u8; 256]> = StaticCell::new(); - static MS_OS_DESC_CELL: StaticCell<[u8; 256]> = StaticCell::new(); - static CONTROL_BUF_CELL: StaticCell<[u8; 64]> = StaticCell::new(); - - let config_desc = CONFIG_DESC_CELL.init([0; 256]); - let bos_desc = BOS_DESC_CELL.init([0; 256]); - let ms_os_desc = MS_OS_DESC_CELL.init([0; 256]); - let control_buf = CONTROL_BUF_CELL.init([0; 64]); - - // embassy-usb 0.5.x builder. - let mut builder = Builder::new(driver, cfg, config_desc, bos_desc, ms_os_desc, control_buf); - - // CDC-ACM class and state. - static CDC_STATE_CELL: StaticCell> = StaticCell::new(); - let cdc_state = CDC_STATE_CELL.init(CdcState::new()); - let cdc = CdcAcmClass::new(&mut builder, cdc_state, 64); - - // Final device must be built after classes are added. - let dev = builder.build(); - - UsbCdc { device: dev, cdc } -} - -/// Runs the USB device forever. Must be spawned once. -#[embassy_executor::task] -pub async fn dev_task(mut dev: UsbDevice<'static>) { - dev.run().await; -} - -/// Writes "tick" once per second while the host keeps DTR asserted. -/// -/// If you prefer unconditional ticks, replace the body with a plain loop -/// that always writes the packet (and remove `wait_connection`/`dtr` checks). -#[embassy_executor::task] -pub async fn tick_task(mut cdc: Cdc<'static>) { - loop { - // Wait until the terminal opens the interface (DTR set). - let _ = cdc.wait_connection().await; - - // Periodic 1 Hz tick while connected. - loop { - if !cdc.dtr() { - break; - } - let _ = cdc.write_packet(b"tick\r\n").await; - Timer::after(Duration::from_secs(1)).await; - } - } -} diff --git a/firmware/memory.x b/firmware/memory.x index 7ac67c2..ef19dff 100644 --- a/firmware/memory.x +++ b/firmware/memory.x @@ -1,19 +1,17 @@ -MEMORY -{ - /* NOTE 1 K = 1 KiBi = 1024 bytes */ - /* To suit Raspberry Pi RP2040 SoC */ - BOOT2 : ORIGIN = 0x10000000, LENGTH = 0x100 - /* Adjust this to suit the size of your specific flash chip */ - FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100 - RAM : ORIGIN = 0x20000000, LENGTH = 264K -} +MEMORY { + BOOT2 : ORIGIN = 0x10000000, LENGTH = 0x100 + FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100 -SECTIONS { + /* Pick one of the two options for RAM layout */ - /* ### Boot loader */ - .boot2 ORIGIN(BOOT2) : - { - KEEP(*(.boot2)); - } > BOOT2 + /* OPTION A: Use all RAM banks as one big block */ + /* Reasonable, unless you are doing something */ + /* really particular with DMA or other concurrent */ + /* access that would benefit from striping */ + RAM : ORIGIN = 0x20000000, LENGTH = 264K -} INSERT BEFORE .text; + /* OPTION B: Keep the unstriped sections separate */ + /* RAM: ORIGIN = 0x20000000, LENGTH = 256K */ + /* SCRATCH_A: ORIGIN = 0x20040000, LENGTH = 4K */ + /* SCRATCH_B: ORIGIN = 0x20041000, LENGTH = 4K */ +} diff --git a/firmware/src/main.rs b/firmware/src/main.rs new file mode 100644 index 0000000..d6d6e9c --- /dev/null +++ b/firmware/src/main.rs @@ -0,0 +1,36 @@ +#![no_std] +#![no_main] + +use embassy_executor::Spawner; +use embassy_rp::bind_interrupts; +use embassy_rp::gpio; +use embassy_rp::peripherals::USB; +use embassy_rp::usb::Driver; +use embassy_rp::usb::InterruptHandler; +use embassy_time::Timer; +use gpio::{Level, Output}; +use {defmt_rtt as _, panic_probe as _}; + +mod usb; + +bind_interrupts!(struct Irqs { + USBCTRL_IRQ => InterruptHandler; +}); + +#[embassy_executor::main] +async fn main(spawner: Spawner) { + let p = embassy_rp::init(Default::default()); + + let driver = Driver::new(p.USB, Irqs); + let usb::UsbMidi { device, midi } = usb::init(driver); + spawner.spawn(usb::dev_task(device)).unwrap(); + spawner.spawn(usb::usb_io_task(midi)).unwrap(); + + let mut led = Output::new(p.PIN_25, Level::Low); + loop { + led.set_high(); + Timer::after_secs(1).await; + led.set_low(); + Timer::after_secs(1).await; + } +} diff --git a/firmware/src/usb/mod.rs b/firmware/src/usb/mod.rs new file mode 100644 index 0000000..54ecc15 --- /dev/null +++ b/firmware/src/usb/mod.rs @@ -0,0 +1,59 @@ +use defmt::info; +use embassy_usb::class::midi::MidiClass; +use embassy_usb::{Builder, Config}; +use static_cell::StaticCell; +use {defmt_rtt as _, panic_probe as _}; + +pub type MyDriver<'d> = embassy_rp::usb::Driver<'d, embassy_rp::peripherals::USB>; +pub type MyUsbDevice<'d> = embassy_usb::UsbDevice<'d, MyDriver<'d>>; +pub type MyMidiClass<'d> = embassy_usb::class::midi::MidiClass<'d, MyDriver<'d>>; + +pub struct UsbMidi { + pub device: MyUsbDevice<'static>, + pub midi: MyMidiClass<'static>, +} + +pub fn init(driver: MyDriver<'static>) -> UsbMidi { + let mut cfg = Config::new(0x2E8A, 0x0010); + cfg.manufacturer = Some("hexaTune"); + cfg.product = Some("hexaGenMini MIDI"); + cfg.serial_number = Some("HTS-0001"); + cfg.max_power = 100; + cfg.max_packet_size_0 = 64; + //cfg.device_class = 0x00; + //cfg.device_sub_class = 0x00; + //cfg.device_protocol = 0x00; + + static CONFIG_DESC: StaticCell<[u8; 256]> = StaticCell::new(); + static BOS_DESC: StaticCell<[u8; 256]> = StaticCell::new(); + static MS_OS_DESC: StaticCell<[u8; 256]> = StaticCell::new(); + static CONTROL_BUF: StaticCell<[u8; 64]> = StaticCell::new(); + + let config_desc = CONFIG_DESC.init([0; 256]); + let bos_desc = BOS_DESC.init([0; 256]); + let ms_os_desc = MS_OS_DESC.init([0; 256]); + let control_buf = CONTROL_BUF.init([0; 64]); + + let mut builder = Builder::new(driver, cfg, config_desc, bos_desc, ms_os_desc, control_buf); + + let midi = MidiClass::new(&mut builder, 1, 1, 64); + + let dev = builder.build(); + UsbMidi { device: dev, midi } +} + +#[embassy_executor::task] +pub async fn dev_task(mut dev: MyUsbDevice<'static>) { + dev.run().await; +} + +#[embassy_executor::task] +pub async fn usb_io_task(mut midi: MyMidiClass<'static>) { + let mut buf = [0; 64]; + loop { + let n = midi.read_packet(&mut buf).await.unwrap(); + let data = &buf[..n]; + info!("data: {:x}", data); + midi.write_packet(data).await.unwrap(); + } +} From c59070e277bdf953dd465e1a4a6bc63c43ac7eda Mon Sep 17 00:00:00 2001 From: Husamettin ARABACI Date: Wed, 1 Oct 2025 15:36:57 +0300 Subject: [PATCH 4/4] test(setup): rules test (#12) * test(setup): rules test Rules Test 1 * test(setup): rules test Rules Test 1 --- .github/workflows/ci.yml | 92 +++++++++++++++++++++++--------- .github/workflows/commitlint.yml | 2 +- README.md | 8 ++- REUSE.toml | 18 ++++++- firmware/Makefile | 2 + firmware/build.rs | 3 ++ firmware/src/main.rs | 3 ++ firmware/src/usb/mod.rs | 3 ++ 8 files changed, 103 insertions(+), 28 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 644da68..e74e57e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,18 +10,32 @@ on: - main - "release/**" +permissions: + contents: read + jobs: fmt: name: Check Formatting (hexaGenMini) runs-on: ubuntu-latest + defaults: + run: + working-directory: firmware steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + # Toolchain + components (rustfmt, clippy) + RP2040 target - name: Install Rust - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt,clippy + targets: thumbv6m-none-eabi + + # Cache to speed up builds + - name: Cache cargo + uses: Swatinem/rust-cache@v2 with: - toolchain: stable - override: true + workspaces: | + firmware - name: Check code formatting run: cargo fmt -- --check @@ -29,44 +43,72 @@ jobs: clippy: name: Run Clippy Linter (hexaGenMini) runs-on: ubuntu-latest + defaults: + run: + working-directory: firmware steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Rust - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable + with: + components: clippy + targets: thumbv6m-none-eabi + + - name: Cache cargo + uses: Swatinem/rust-cache@v2 with: - toolchain: stable - override: true + workspaces: | + firmware - - name: Run Clippy - run: cargo clippy --all-targets --all-features -- -D warnings + - name: Run Clippy (RP2040 target) + run: cargo clippy --target thumbv6m-none-eabi -- -D warnings build: - name: Build Project (hexaGenMini) + name: Build (hexaGenMini) runs-on: ubuntu-latest + defaults: + run: + working-directory: firmware steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Rust - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable with: - toolchain: stable - override: true + targets: thumbv6m-none-eabi - - name: Build - run: cargo build --locked --all-targets + - name: Cache cargo + uses: Swatinem/rust-cache@v2 + with: + workspaces: | + firmware + + # Eğer projenizde extra llvm-tools vs. gerekiyorsa burada ekleyebilirsiniz + # - run: rustup component add llvm-tools-preview + + - name: Build (hexaGenMini) + run: cargo build --release --target thumbv6m-none-eabi - test: - name: Run Tests (hexaGenMini) + check: + name: Check compiles (hexaGenMini) runs-on: ubuntu-latest + defaults: + run: + working-directory: firmware steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Rust - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable + with: + targets: thumbv6m-none-eabi + + - name: Cache cargo + uses: Swatinem/rust-cache@v2 with: - toolchain: stable - override: true + workspaces: | + firmware - - name: Run tests - run: cargo test --locked --all-targets + - name: Cargo check (RP2040 target) + run: cargo check --target thumbv6m-none-eabi diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml index 865b751..bd7cdf9 100644 --- a/.github/workflows/commitlint.yml +++ b/.github/workflows/commitlint.yml @@ -17,5 +17,5 @@ jobs: - name: Lint commits uses: wagoid/commitlint-github-action@v5 with: - configFile: .commitlintrc.yml + configFile: .github/.commitlintrc.yml failOnWarnings: true diff --git a/README.md b/README.md index 63e1a7c..cca41ed 100644 --- a/README.md +++ b/README.md @@ -1 +1,7 @@ -# hexaGenMini \ No newline at end of file + + +# hexaGenMini + diff --git a/REUSE.toml b/REUSE.toml index e850e3e..b2b7395 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -1,7 +1,23 @@ version = 1 [[annotations]] -path = ["package.json", "CHANGELOG.md"] +path = ["package.json", "CHANGELOG.md", ".gitignore", "docs/CNAME"] +precedence = "aggregate" +SPDX-FileCopyrightText = "2025 hexaTune LLC" +SPDX-License-Identifier = "MIT" + +[[annotations]] +path = ["hardware/**", "mechanic/**"] +precedence = "aggregate" +SPDX-FileCopyrightText = "2025 hexaTune LLC" +SPDX-License-Identifier = "MIT" + +[[annotations]] +path = [ + "firmware/.cargo/config.toml", + "firmware/Cargo.lock", + "firmware/memory.x", +] precedence = "aggregate" SPDX-FileCopyrightText = "2025 hexaTune LLC" SPDX-License-Identifier = "MIT" diff --git a/firmware/Makefile b/firmware/Makefile index e9aadc7..39bb0f2 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2025 hexaTune LLC +# SPDX-License-Identifier: MIT # ===== User config ===== BIN ?= hexagenmini TRIPLE ?= thumbv6m-none-eabi diff --git a/firmware/build.rs b/firmware/build.rs index 3f915f9..0e0de19 100644 --- a/firmware/build.rs +++ b/firmware/build.rs @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: 2025 hexaTune LLC +// SPDX-License-Identifier: MIT + //! This build script copies the `memory.x` file from the crate root into //! a directory where the linker can always find it at build time. //! For many projects this is optional, as the linker always searches the diff --git a/firmware/src/main.rs b/firmware/src/main.rs index d6d6e9c..8caf0f5 100644 --- a/firmware/src/main.rs +++ b/firmware/src/main.rs @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: 2025 hexaTune LLC +// SPDX-License-Identifier: MIT + #![no_std] #![no_main] diff --git a/firmware/src/usb/mod.rs b/firmware/src/usb/mod.rs index 54ecc15..62cd45c 100644 --- a/firmware/src/usb/mod.rs +++ b/firmware/src/usb/mod.rs @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: 2025 hexaTune LLC +// SPDX-License-Identifier: MIT + use defmt::info; use embassy_usb::class::midi::MidiClass; use embassy_usb::{Builder, Config};