Trimmed dependencies and fixed CI errors
diff --git a/MODULE.bazel b/MODULE.bazel
index 677e127..f2d22c8 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -129,12 +129,5 @@
 )
 use_repo(ast1060_pac_ext, "ast1060_pac", "vcell")
 
-# ── Aspeed DDK (bare-metal I2C / GPIO / crypto drivers) ──
-aspeed_ddk_ext = use_extension(
-    "//third_party:aspeed_ddk.bzl",
-    "aspeed_ddk_ext",
-)
-use_repo(aspeed_ddk_ext, "aspeed_ddk")
-
 hsm = use_extension("//third_party/hsm:extensions.bzl", "hsm")
 use_repo(hsm, "cloud_kms_hsm")
diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock
index f2fd0b4..b66e0d4 100644
--- a/MODULE.bazel.lock
+++ b/MODULE.bazel.lock
@@ -2707,8 +2707,8 @@
         "bzlTransitiveDigest": "3kVt1CoIJVJiOv5hhXwKcnZWdFwwoEOhc/OeC2GrMQU=",
         "usagesDigest": "/Nz9QH+EBlDXoVXWiAEH8owsAo1cu+GkXjlRdolG7Sk=",
         "recordedFileInputs": {
-          "@@//third_party/crates_io/Cargo.lock": "59d1b7ace2641cb98136bb9f8739a222c946cb37a5ce6553be6eca54ccc0ce2c",
-          "@@//third_party/crates_io/Cargo.toml": "d55ef94efb95d2614bdb17cc202eb2fce1d784def8b4ddc61f1cfc62eee5bc19",
+          "@@//third_party/crates_io/Cargo.lock": "fceaaabe11711662d270b2d8d38d98d379704ecc394b1f1cbcfef930d9ae932a",
+          "@@//third_party/crates_io/Cargo.toml": "d79aadc37ac91c8bd72ad8ca8fa294bc16c18c90d7782e4c4354c4c6b04a13dc",
           "@@caliptra_deps+//crates_io/embedded/Cargo.lock": "d6c0101f48da22f2bc2d339f358de79bad3dd03218c6db29a14099b9f7757691",
           "@@caliptra_deps+//crates_io/embedded/Cargo.toml": "8f9f4ed2721db13476b12fdac045dac2142b38f189a8abb5f4c446dc0c6ac3dd",
           "@@caliptra_deps+//crates_io/host/Cargo.lock": "ae555b01424917ec61d892c15d7a66af88c2f10be4e0e7b0bc2357b702883b89",
@@ -2734,9 +2734,9 @@
             "repoRuleId": "@@rules_rust+//crate_universe:extensions.bzl%_generate_repo",
             "attributes": {
               "contents": {
-                "BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'openprot'\n###############################################################################\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files(\n    [\n        \"cargo-bazel.json\",\n        \"crates.bzl\",\n        \"defs.bzl\",\n    ] + glob(\n        allow_empty = True,\n        include = [\"*.bazel\"],\n    ),\n)\n\nfilegroup(\n    name = \"srcs\",\n    srcs = glob(\n        allow_empty = True,\n        include = [\n            \"*.bazel\",\n            \"*.bzl\",\n        ],\n    ),\n)\n\n# Workspace Member Dependencies\nalias(\n    name = \"aes-0.8.4\",\n    actual = \"@rust_crates__aes-0.8.4//:aes\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aes\",\n    actual = \"@rust_crates__aes-0.8.4//:aes\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aes-gcm-0.10.3\",\n    actual = \"@rust_crates__aes-gcm-0.10.3//:aes_gcm\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aes-gcm\",\n    actual = \"@rust_crates__aes-gcm-0.10.3//:aes_gcm\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aligned-0.4.3\",\n    actual = \"@rust_crates__aligned-0.4.3//:aligned\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aligned\",\n    actual = \"@rust_crates__aligned-0.4.3//:aligned\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"anyhow-1.0.102\",\n    actual = \"@rust_crates__anyhow-1.0.102//:anyhow\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"anyhow\",\n    actual = \"@rust_crates__anyhow-1.0.102//:anyhow\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"bitfield-0.14.0\",\n    actual = \"@rust_crates__bitfield-0.14.0//:bitfield\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"bitfield\",\n    actual = \"@rust_crates__bitfield-0.14.0//:bitfield\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"bitfield-struct-0.11.0\",\n    actual = \"@rust_crates__bitfield-struct-0.11.0//:bitfield_struct\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"bitfield-struct\",\n    actual = \"@rust_crates__bitfield-struct-0.11.0//:bitfield_struct\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"bitflags-2.11.1\",\n    actual = \"@rust_crates__bitflags-2.11.1//:bitflags\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"bitflags\",\n    actual = \"@rust_crates__bitflags-2.11.1//:bitflags\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"byteorder-1.5.0\",\n    actual = \"@rust_crates__byteorder-1.5.0//:byteorder\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"byteorder\",\n    actual = \"@rust_crates__byteorder-1.5.0//:byteorder\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cfg-if-1.0.4\",\n    actual = \"@rust_crates__cfg-if-1.0.4//:cfg_if\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cfg-if\",\n    actual = \"@rust_crates__cfg-if-1.0.4//:cfg_if\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cipher-0.4.4\",\n    actual = \"@rust_crates__cipher-0.4.4//:cipher\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cipher\",\n    actual = \"@rust_crates__cipher-0.4.4//:cipher\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"clap-4.6.1\",\n    actual = \"@rust_crates__clap-4.6.1//:clap\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"clap\",\n    actual = \"@rust_crates__clap-4.6.1//:clap\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"compiler_builtins-0.1.160\",\n    actual = \"@rust_crates__compiler_builtins-0.1.160//:compiler_builtins\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"compiler_builtins\",\n    actual = \"@rust_crates__compiler_builtins-0.1.160//:compiler_builtins\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-0.7.7\",\n    actual = \"@rust_crates__cortex-m-0.7.7//:cortex_m\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m\",\n    actual = \"@rust_crates__cortex-m-0.7.7//:cortex_m\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-rt-0.7.5\",\n    actual = \"@rust_crates__cortex-m-rt-0.7.5//:cortex_m_rt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-rt\",\n    actual = \"@rust_crates__cortex-m-rt-0.7.5//:cortex_m_rt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-semihosting-0.5.0\",\n    actual = \"@rust_crates__cortex-m-semihosting-0.5.0//:cortex_m_semihosting\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-semihosting\",\n    actual = \"@rust_crates__cortex-m-semihosting-0.5.0//:cortex_m_semihosting\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ctr-0.9.2\",\n    actual = \"@rust_crates__ctr-0.9.2//:ctr\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ctr\",\n    actual = \"@rust_crates__ctr-0.9.2//:ctr\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ecdsa-0.16.9\",\n    actual = \"@rust_crates__ecdsa-0.16.9//:ecdsa\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ecdsa\",\n    actual = \"@rust_crates__ecdsa-0.16.9//:ecdsa\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal-1.0.0\",\n    actual = \"@rust_crates__embedded-hal-1.0.0//:embedded_hal\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal\",\n    actual = \"@rust_crates__embedded-hal-1.0.0//:embedded_hal\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal-async-1.0.0\",\n    actual = \"@rust_crates__embedded-hal-async-1.0.0//:embedded_hal_async\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal-async\",\n    actual = \"@rust_crates__embedded-hal-async-1.0.0//:embedded_hal_async\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal-nb-1.0.0\",\n    actual = \"@rust_crates__embedded-hal-nb-1.0.0//:embedded_hal_nb\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal-nb\",\n    actual = \"@rust_crates__embedded-hal-nb-1.0.0//:embedded_hal_nb\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-io-0.6.1\",\n    actual = \"@rust_crates__embedded-io-0.6.1//:embedded_io\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-io\",\n    actual = \"@rust_crates__embedded-io-0.6.1//:embedded_io\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"fugit-0.3.9\",\n    actual = \"@rust_crates__fugit-0.3.9//:fugit\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"fugit\",\n    actual = \"@rust_crates__fugit-0.3.9//:fugit\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"futures-0.3.32\",\n    actual = \"@rust_crates__futures-0.3.32//:futures\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"futures\",\n    actual = \"@rust_crates__futures-0.3.32//:futures\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"heapless-0.9.2\",\n    actual = \"@rust_crates__heapless-0.9.2//:heapless\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"heapless\",\n    actual = \"@rust_crates__heapless-0.9.2//:heapless\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hex-0.4.3\",\n    actual = \"@rust_crates__hex-0.4.3//:hex\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hex\",\n    actual = \"@rust_crates__hex-0.4.3//:hex\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hex-literal-0.4.1\",\n    actual = \"@rust_crates__hex-literal-0.4.1//:hex_literal\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hex-literal\",\n    actual = \"@rust_crates__hex-literal-0.4.1//:hex_literal\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hmac-0.12.1\",\n    actual = \"@rust_crates__hmac-0.12.1//:hmac\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hmac\",\n    actual = \"@rust_crates__hmac-0.12.1//:hmac\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"k256-0.13.4\",\n    actual = \"@rust_crates__k256-0.13.4//:k256\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"k256\",\n    actual = \"@rust_crates__k256-0.13.4//:k256\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"log-0.4.29\",\n    actual = \"@rust_crates__log-0.4.29//:log\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"log\",\n    actual = \"@rust_crates__log-0.4.29//:log\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"mctp-0.2.0\",\n    actual = \"@rust_crates__mctp-0.2.0//:mctp\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"mctp\",\n    actual = \"@rust_crates__mctp-0.2.0//:mctp\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"mctp-lib-0.1.0\",\n    actual = \"@rust_crates__mctp-lib-0.1.0//:mctp_lib\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"mctp-lib\",\n    actual = \"@rust_crates__mctp-lib-0.1.0//:mctp_lib\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"memoffset-0.9.1\",\n    actual = \"@rust_crates__memoffset-0.9.1//:memoffset\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"memoffset\",\n    actual = \"@rust_crates__memoffset-0.9.1//:memoffset\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"minijinja-2.19.0\",\n    actual = \"@rust_crates__minijinja-2.19.0//:minijinja\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"minijinja\",\n    actual = \"@rust_crates__minijinja-2.19.0//:minijinja\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"nb-1.1.0\",\n    actual = \"@rust_crates__nb-1.1.0//:nb\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"nb\",\n    actual = \"@rust_crates__nb-1.1.0//:nb\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"nom-7.1.3\",\n    actual = \"@rust_crates__nom-7.1.3//:nom\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"nom\",\n    actual = \"@rust_crates__nom-7.1.3//:nom\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"object-0.37.3\",\n    actual = \"@rust_crates__object-0.37.3//:object\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"object\",\n    actual = \"@rust_crates__object-0.37.3//:object\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"openprot-hal-blocking-0.1.0\",\n    actual = \"@rust_crates__openprot-hal-blocking-0.1.0//:openprot_hal_blocking\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"openprot-hal-blocking\",\n    actual = \"@rust_crates__openprot-hal-blocking-0.1.0//:openprot_hal_blocking\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"p256-0.13.2\",\n    actual = \"@rust_crates__p256-0.13.2//:p256\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"p256\",\n    actual = \"@rust_crates__p256-0.13.2//:p256\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"p384-0.13.1\",\n    actual = \"@rust_crates__p384-0.13.1//:p384\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"p384\",\n    actual = \"@rust_crates__p384-0.13.1//:p384\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"panic-halt-1.0.0\",\n    actual = \"@rust_crates__panic-halt-1.0.0//:panic_halt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"panic-halt\",\n    actual = \"@rust_crates__panic-halt-1.0.0//:panic_halt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"paste-1.0.15\",\n    actual = \"@rust_crates__paste-1.0.15//:paste\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"paste\",\n    actual = \"@rust_crates__paste-1.0.15//:paste\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"proc-macro2-1.0.106\",\n    actual = \"@rust_crates__proc-macro2-1.0.106//:proc_macro2\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"proc-macro2\",\n    actual = \"@rust_crates__proc-macro2-1.0.106//:proc_macro2\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"proposed-traits-0.1.0\",\n    actual = \"@rust_crates__proposed-traits-0.1.0//:proposed_traits\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"proposed-traits\",\n    actual = \"@rust_crates__proposed-traits-0.1.0//:proposed_traits\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"prost-0.13.5\",\n    actual = \"@rust_crates__prost-0.13.5//:prost\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"prost\",\n    actual = \"@rust_crates__prost-0.13.5//:prost\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"quote-1.0.45\",\n    actual = \"@rust_crates__quote-1.0.45//:quote\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"quote\",\n    actual = \"@rust_crates__quote-1.0.45//:quote\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"rand_core-0.9.5\",\n    actual = \"@rust_crates__rand_core-0.9.5//:rand_core\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"rand_core\",\n    actual = \"@rust_crates__rand_core-0.9.5//:rand_core\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"riscv-0.12.1\",\n    actual = \"@rust_crates__riscv-0.12.1//:riscv\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"riscv\",\n    actual = \"@rust_crates__riscv-0.12.1//:riscv\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"riscv-rt-0.12.2\",\n    actual = \"@rust_crates__riscv-rt-0.12.2//:riscv_rt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"riscv-rt\",\n    actual = \"@rust_crates__riscv-rt-0.12.2//:riscv_rt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"riscv-semihosting-0.1.3\",\n    actual = \"@rust_crates__riscv-semihosting-0.1.3//:riscv_semihosting\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"riscv-semihosting\",\n    actual = \"@rust_crates__riscv-semihosting-0.1.3//:riscv_semihosting\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"rustc-demangle-0.1.27\",\n    actual = \"@rust_crates__rustc-demangle-0.1.27//:rustc_demangle\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"rustc-demangle\",\n    actual = \"@rust_crates__rustc-demangle-0.1.27//:rustc_demangle\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sec1-0.7.3\",\n    actual = \"@rust_crates__sec1-0.7.3//:sec1\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sec1\",\n    actual = \"@rust_crates__sec1-0.7.3//:sec1\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"serde-1.0.228\",\n    actual = \"@rust_crates__serde-1.0.228//:serde\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"serde\",\n    actual = \"@rust_crates__serde-1.0.228//:serde\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"serde_derive-1.0.228\",\n    actual = \"@rust_crates__serde_derive-1.0.228//:serde_derive\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"serde_derive\",\n    actual = \"@rust_crates__serde_derive-1.0.228//:serde_derive\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"serde_json5-0.2.1\",\n    actual = \"@rust_crates__serde_json5-0.2.1//:serde_json5\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"serde_json5\",\n    actual = \"@rust_crates__serde_json5-0.2.1//:serde_json5\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sha2-0.10.9\",\n    actual = \"@rust_crates__sha2-0.10.9//:sha2\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sha2\",\n    actual = \"@rust_crates__sha2-0.10.9//:sha2\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sha3-0.10.9\",\n    actual = \"@rust_crates__sha3-0.10.9//:sha3\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sha3\",\n    actual = \"@rust_crates__sha3-0.10.9//:sha3\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"smlang-0.8.0\",\n    actual = \"@rust_crates__smlang-0.8.0//:smlang\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"smlang\",\n    actual = \"@rust_crates__smlang-0.8.0//:smlang\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"subtle-2.6.1\",\n    actual = \"@rust_crates__subtle-2.6.1//:subtle\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"subtle\",\n    actual = \"@rust_crates__subtle-2.6.1//:subtle\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"syn-1.0.109\",\n    actual = \"@rust_crates__syn-1.0.109//:syn\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"syn1-1.0.109\",\n    actual = \"@rust_crates__syn-1.0.109//:syn\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"syn1\",\n    actual = \"@rust_crates__syn-1.0.109//:syn\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"syn-2.0.117\",\n    actual = \"@rust_crates__syn-2.0.117//:syn\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"syn\",\n    actual = \"@rust_crates__syn-2.0.117//:syn\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"thiserror-2.0.18\",\n    actual = \"@rust_crates__thiserror-2.0.18//:thiserror\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"thiserror\",\n    actual = \"@rust_crates__thiserror-2.0.18//:thiserror\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"tock-registers-0.9.0\",\n    actual = \"@rust_crates__tock-registers-0.9.0//:tock_registers\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"tock-registers\",\n    actual = \"@rust_crates__tock-registers-0.9.0//:tock_registers\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"tokio-1.52.1\",\n    actual = \"@rust_crates__tokio-1.52.1//:tokio\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"tokio\",\n    actual = \"@rust_crates__tokio-1.52.1//:tokio\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"tokio-util-0.7.18\",\n    actual = \"@rust_crates__tokio-util-0.7.18//:tokio_util\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"tokio-util\",\n    actual = \"@rust_crates__tokio-util-0.7.18//:tokio_util\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"vcell-0.1.3\",\n    actual = \"@rust_crates__vcell-0.1.3//:vcell\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"vcell\",\n    actual = \"@rust_crates__vcell-0.1.3//:vcell\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"zerocopy-0.8.48\",\n    actual = \"@rust_crates__zerocopy-0.8.48//:zerocopy\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"zerocopy\",\n    actual = \"@rust_crates__zerocopy-0.8.48//:zerocopy\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"zeroize-1.8.2\",\n    actual = \"@rust_crates__zeroize-1.8.2//:zeroize\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"zeroize\",\n    actual = \"@rust_crates__zeroize-1.8.2//:zeroize\",\n    tags = [\"manual\"],\n)\n",
+                "BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'openprot'\n###############################################################################\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files(\n    [\n        \"cargo-bazel.json\",\n        \"crates.bzl\",\n        \"defs.bzl\",\n    ] + glob(\n        allow_empty = True,\n        include = [\"*.bazel\"],\n    ),\n)\n\nfilegroup(\n    name = \"srcs\",\n    srcs = glob(\n        allow_empty = True,\n        include = [\n            \"*.bazel\",\n            \"*.bzl\",\n        ],\n    ),\n)\n\n# Workspace Member Dependencies\nalias(\n    name = \"aes-0.8.4\",\n    actual = \"@rust_crates__aes-0.8.4//:aes\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aes\",\n    actual = \"@rust_crates__aes-0.8.4//:aes\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aes-gcm-0.10.3\",\n    actual = \"@rust_crates__aes-gcm-0.10.3//:aes_gcm\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aes-gcm\",\n    actual = \"@rust_crates__aes-gcm-0.10.3//:aes_gcm\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aligned-0.4.3\",\n    actual = \"@rust_crates__aligned-0.4.3//:aligned\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aligned\",\n    actual = \"@rust_crates__aligned-0.4.3//:aligned\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"anyhow-1.0.102\",\n    actual = \"@rust_crates__anyhow-1.0.102//:anyhow\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"anyhow\",\n    actual = \"@rust_crates__anyhow-1.0.102//:anyhow\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"bitfield-0.14.0\",\n    actual = \"@rust_crates__bitfield-0.14.0//:bitfield\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"bitfield\",\n    actual = \"@rust_crates__bitfield-0.14.0//:bitfield\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"bitfield-struct-0.11.0\",\n    actual = \"@rust_crates__bitfield-struct-0.11.0//:bitfield_struct\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"bitfield-struct\",\n    actual = \"@rust_crates__bitfield-struct-0.11.0//:bitfield_struct\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"bitflags-2.11.1\",\n    actual = \"@rust_crates__bitflags-2.11.1//:bitflags\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"bitflags\",\n    actual = \"@rust_crates__bitflags-2.11.1//:bitflags\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"byteorder-1.5.0\",\n    actual = \"@rust_crates__byteorder-1.5.0//:byteorder\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"byteorder\",\n    actual = \"@rust_crates__byteorder-1.5.0//:byteorder\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cfg-if-1.0.4\",\n    actual = \"@rust_crates__cfg-if-1.0.4//:cfg_if\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cfg-if\",\n    actual = \"@rust_crates__cfg-if-1.0.4//:cfg_if\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cipher-0.4.4\",\n    actual = \"@rust_crates__cipher-0.4.4//:cipher\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cipher\",\n    actual = \"@rust_crates__cipher-0.4.4//:cipher\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"clap-4.6.1\",\n    actual = \"@rust_crates__clap-4.6.1//:clap\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"clap\",\n    actual = \"@rust_crates__clap-4.6.1//:clap\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"compiler_builtins-0.1.160\",\n    actual = \"@rust_crates__compiler_builtins-0.1.160//:compiler_builtins\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"compiler_builtins\",\n    actual = \"@rust_crates__compiler_builtins-0.1.160//:compiler_builtins\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-0.7.7\",\n    actual = \"@rust_crates__cortex-m-0.7.7//:cortex_m\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m\",\n    actual = \"@rust_crates__cortex-m-0.7.7//:cortex_m\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-rt-0.7.5\",\n    actual = \"@rust_crates__cortex-m-rt-0.7.5//:cortex_m_rt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-rt\",\n    actual = \"@rust_crates__cortex-m-rt-0.7.5//:cortex_m_rt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-semihosting-0.5.0\",\n    actual = \"@rust_crates__cortex-m-semihosting-0.5.0//:cortex_m_semihosting\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-semihosting\",\n    actual = \"@rust_crates__cortex-m-semihosting-0.5.0//:cortex_m_semihosting\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ctr-0.9.2\",\n    actual = \"@rust_crates__ctr-0.9.2//:ctr\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ctr\",\n    actual = \"@rust_crates__ctr-0.9.2//:ctr\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ecdsa-0.16.9\",\n    actual = \"@rust_crates__ecdsa-0.16.9//:ecdsa\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ecdsa\",\n    actual = \"@rust_crates__ecdsa-0.16.9//:ecdsa\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal-1.0.0\",\n    actual = \"@rust_crates__embedded-hal-1.0.0//:embedded_hal\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal\",\n    actual = \"@rust_crates__embedded-hal-1.0.0//:embedded_hal\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal-async-1.0.0\",\n    actual = \"@rust_crates__embedded-hal-async-1.0.0//:embedded_hal_async\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal-async\",\n    actual = \"@rust_crates__embedded-hal-async-1.0.0//:embedded_hal_async\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal-nb-1.0.0\",\n    actual = \"@rust_crates__embedded-hal-nb-1.0.0//:embedded_hal_nb\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal-nb\",\n    actual = \"@rust_crates__embedded-hal-nb-1.0.0//:embedded_hal_nb\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-io-0.6.1\",\n    actual = \"@rust_crates__embedded-io-0.6.1//:embedded_io\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-io\",\n    actual = \"@rust_crates__embedded-io-0.6.1//:embedded_io\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"fugit-0.3.9\",\n    actual = \"@rust_crates__fugit-0.3.9//:fugit\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"fugit\",\n    actual = \"@rust_crates__fugit-0.3.9//:fugit\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"futures-0.3.32\",\n    actual = \"@rust_crates__futures-0.3.32//:futures\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"futures\",\n    actual = \"@rust_crates__futures-0.3.32//:futures\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"heapless-0.9.2\",\n    actual = \"@rust_crates__heapless-0.9.2//:heapless\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"heapless\",\n    actual = \"@rust_crates__heapless-0.9.2//:heapless\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hex-0.4.3\",\n    actual = \"@rust_crates__hex-0.4.3//:hex\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hex\",\n    actual = \"@rust_crates__hex-0.4.3//:hex\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hex-literal-0.4.1\",\n    actual = \"@rust_crates__hex-literal-0.4.1//:hex_literal\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hex-literal\",\n    actual = \"@rust_crates__hex-literal-0.4.1//:hex_literal\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hmac-0.12.1\",\n    actual = \"@rust_crates__hmac-0.12.1//:hmac\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hmac\",\n    actual = \"@rust_crates__hmac-0.12.1//:hmac\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"k256-0.13.4\",\n    actual = \"@rust_crates__k256-0.13.4//:k256\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"k256\",\n    actual = \"@rust_crates__k256-0.13.4//:k256\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"log-0.4.29\",\n    actual = \"@rust_crates__log-0.4.29//:log\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"log\",\n    actual = \"@rust_crates__log-0.4.29//:log\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"mctp-0.2.0\",\n    actual = \"@rust_crates__mctp-0.2.0//:mctp\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"mctp\",\n    actual = \"@rust_crates__mctp-0.2.0//:mctp\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"mctp-lib-0.1.0\",\n    actual = \"@rust_crates__mctp-lib-0.1.0//:mctp_lib\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"mctp-lib\",\n    actual = \"@rust_crates__mctp-lib-0.1.0//:mctp_lib\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"memoffset-0.9.1\",\n    actual = \"@rust_crates__memoffset-0.9.1//:memoffset\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"memoffset\",\n    actual = \"@rust_crates__memoffset-0.9.1//:memoffset\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"minijinja-2.19.0\",\n    actual = \"@rust_crates__minijinja-2.19.0//:minijinja\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"minijinja\",\n    actual = \"@rust_crates__minijinja-2.19.0//:minijinja\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"nb-1.1.0\",\n    actual = \"@rust_crates__nb-1.1.0//:nb\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"nb\",\n    actual = \"@rust_crates__nb-1.1.0//:nb\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"nom-7.1.3\",\n    actual = \"@rust_crates__nom-7.1.3//:nom\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"nom\",\n    actual = \"@rust_crates__nom-7.1.3//:nom\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"object-0.37.3\",\n    actual = \"@rust_crates__object-0.37.3//:object\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"object\",\n    actual = \"@rust_crates__object-0.37.3//:object\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"openprot-hal-blocking-0.1.0\",\n    actual = \"@rust_crates__openprot-hal-blocking-0.1.0//:openprot_hal_blocking\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"openprot-hal-blocking\",\n    actual = \"@rust_crates__openprot-hal-blocking-0.1.0//:openprot_hal_blocking\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"p256-0.13.2\",\n    actual = \"@rust_crates__p256-0.13.2//:p256\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"p256\",\n    actual = \"@rust_crates__p256-0.13.2//:p256\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"p384-0.13.1\",\n    actual = \"@rust_crates__p384-0.13.1//:p384\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"p384\",\n    actual = \"@rust_crates__p384-0.13.1//:p384\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"panic-halt-1.0.0\",\n    actual = \"@rust_crates__panic-halt-1.0.0//:panic_halt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"panic-halt\",\n    actual = \"@rust_crates__panic-halt-1.0.0//:panic_halt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"paste-1.0.15\",\n    actual = \"@rust_crates__paste-1.0.15//:paste\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"paste\",\n    actual = \"@rust_crates__paste-1.0.15//:paste\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"proc-macro2-1.0.106\",\n    actual = \"@rust_crates__proc-macro2-1.0.106//:proc_macro2\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"proc-macro2\",\n    actual = \"@rust_crates__proc-macro2-1.0.106//:proc_macro2\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"prost-0.13.5\",\n    actual = \"@rust_crates__prost-0.13.5//:prost\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"prost\",\n    actual = \"@rust_crates__prost-0.13.5//:prost\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"quote-1.0.45\",\n    actual = \"@rust_crates__quote-1.0.45//:quote\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"quote\",\n    actual = \"@rust_crates__quote-1.0.45//:quote\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"rand_core-0.9.5\",\n    actual = \"@rust_crates__rand_core-0.9.5//:rand_core\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"rand_core\",\n    actual = \"@rust_crates__rand_core-0.9.5//:rand_core\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"riscv-0.12.1\",\n    actual = \"@rust_crates__riscv-0.12.1//:riscv\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"riscv\",\n    actual = \"@rust_crates__riscv-0.12.1//:riscv\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"riscv-rt-0.12.2\",\n    actual = \"@rust_crates__riscv-rt-0.12.2//:riscv_rt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"riscv-rt\",\n    actual = \"@rust_crates__riscv-rt-0.12.2//:riscv_rt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"riscv-semihosting-0.1.3\",\n    actual = \"@rust_crates__riscv-semihosting-0.1.3//:riscv_semihosting\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"riscv-semihosting\",\n    actual = \"@rust_crates__riscv-semihosting-0.1.3//:riscv_semihosting\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"rustc-demangle-0.1.27\",\n    actual = \"@rust_crates__rustc-demangle-0.1.27//:rustc_demangle\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"rustc-demangle\",\n    actual = \"@rust_crates__rustc-demangle-0.1.27//:rustc_demangle\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sec1-0.7.3\",\n    actual = \"@rust_crates__sec1-0.7.3//:sec1\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sec1\",\n    actual = \"@rust_crates__sec1-0.7.3//:sec1\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"serde-1.0.228\",\n    actual = \"@rust_crates__serde-1.0.228//:serde\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"serde\",\n    actual = \"@rust_crates__serde-1.0.228//:serde\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"serde_derive-1.0.228\",\n    actual = \"@rust_crates__serde_derive-1.0.228//:serde_derive\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"serde_derive\",\n    actual = \"@rust_crates__serde_derive-1.0.228//:serde_derive\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"serde_json5-0.2.1\",\n    actual = \"@rust_crates__serde_json5-0.2.1//:serde_json5\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"serde_json5\",\n    actual = \"@rust_crates__serde_json5-0.2.1//:serde_json5\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sha2-0.10.9\",\n    actual = \"@rust_crates__sha2-0.10.9//:sha2\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sha2\",\n    actual = \"@rust_crates__sha2-0.10.9//:sha2\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sha3-0.10.9\",\n    actual = \"@rust_crates__sha3-0.10.9//:sha3\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sha3\",\n    actual = \"@rust_crates__sha3-0.10.9//:sha3\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"smlang-0.8.0\",\n    actual = \"@rust_crates__smlang-0.8.0//:smlang\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"smlang\",\n    actual = \"@rust_crates__smlang-0.8.0//:smlang\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"subtle-2.6.1\",\n    actual = \"@rust_crates__subtle-2.6.1//:subtle\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"subtle\",\n    actual = \"@rust_crates__subtle-2.6.1//:subtle\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"syn-1.0.109\",\n    actual = \"@rust_crates__syn-1.0.109//:syn\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"syn1-1.0.109\",\n    actual = \"@rust_crates__syn-1.0.109//:syn\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"syn1\",\n    actual = \"@rust_crates__syn-1.0.109//:syn\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"syn-2.0.117\",\n    actual = \"@rust_crates__syn-2.0.117//:syn\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"syn\",\n    actual = \"@rust_crates__syn-2.0.117//:syn\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"thiserror-2.0.18\",\n    actual = \"@rust_crates__thiserror-2.0.18//:thiserror\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"thiserror\",\n    actual = \"@rust_crates__thiserror-2.0.18//:thiserror\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"tock-registers-0.9.0\",\n    actual = \"@rust_crates__tock-registers-0.9.0//:tock_registers\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"tock-registers\",\n    actual = \"@rust_crates__tock-registers-0.9.0//:tock_registers\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"tokio-1.52.1\",\n    actual = \"@rust_crates__tokio-1.52.1//:tokio\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"tokio\",\n    actual = \"@rust_crates__tokio-1.52.1//:tokio\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"tokio-util-0.7.18\",\n    actual = \"@rust_crates__tokio-util-0.7.18//:tokio_util\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"tokio-util\",\n    actual = \"@rust_crates__tokio-util-0.7.18//:tokio_util\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"vcell-0.1.3\",\n    actual = \"@rust_crates__vcell-0.1.3//:vcell\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"vcell\",\n    actual = \"@rust_crates__vcell-0.1.3//:vcell\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"zerocopy-0.8.48\",\n    actual = \"@rust_crates__zerocopy-0.8.48//:zerocopy\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"zerocopy\",\n    actual = \"@rust_crates__zerocopy-0.8.48//:zerocopy\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"zeroize-1.8.2\",\n    actual = \"@rust_crates__zeroize-1.8.2//:zeroize\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"zeroize\",\n    actual = \"@rust_crates__zeroize-1.8.2//:zeroize\",\n    tags = [\"manual\"],\n)\n",
                 "alias_rules.bzl": "\"\"\"Alias that transitions its target to `compilation_mode=opt`.  Use `transition_alias=\"opt\"` to enable.\"\"\"\n\nload(\"@rules_cc//cc:defs.bzl\", \"CcInfo\")\nload(\"@rules_rust//rust:rust_common.bzl\", \"COMMON_PROVIDERS\")\n\ndef _transition_alias_impl(ctx):\n    # `ctx.attr.actual` is a list of 1 item due to the transition\n    providers = [ctx.attr.actual[0][provider] for provider in COMMON_PROVIDERS]\n    if CcInfo in ctx.attr.actual[0]:\n        providers.append(ctx.attr.actual[0][CcInfo])\n    return providers\n\ndef _change_compilation_mode(compilation_mode):\n    def _change_compilation_mode_impl(_settings, _attr):\n        return {\n            \"//command_line_option:compilation_mode\": compilation_mode,\n        }\n\n    return transition(\n        implementation = _change_compilation_mode_impl,\n        inputs = [],\n        outputs = [\n            \"//command_line_option:compilation_mode\",\n        ],\n    )\n\ndef _transition_alias_rule(compilation_mode):\n    return rule(\n        implementation = _transition_alias_impl,\n        provides = COMMON_PROVIDERS,\n        attrs = {\n            \"actual\": attr.label(\n                mandatory = True,\n                doc = \"`rust_library()` target to transition to `compilation_mode=opt`.\",\n                providers = COMMON_PROVIDERS,\n                cfg = _change_compilation_mode(compilation_mode),\n            ),\n            \"_allowlist_function_transition\": attr.label(\n                default = \"@bazel_tools//tools/allowlists/function_transition_allowlist\",\n            ),\n        },\n        doc = \"Transitions a Rust library crate to the `compilation_mode=opt`.\",\n    )\n\ntransition_alias_dbg = _transition_alias_rule(\"dbg\")\ntransition_alias_fastbuild = _transition_alias_rule(\"fastbuild\")\ntransition_alias_opt = _transition_alias_rule(\"opt\")\n",
-                "defs.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'openprot'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"new_git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe/private:local_crate_mirror.bzl\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n    \"\"\"Flatten a list of dependency maps into one dictionary.\n\n    Dependency maps have the following structure:\n\n    ```python\n    DEPENDENCIES_MAP = {\n        # The first key in the map is a Bazel package\n        # name of the workspace this file is defined in.\n        \"workspace_member_package\": {\n\n            # Not all dependencies are supported for all platforms.\n            # the condition key is the condition required to be true\n            # on the host platform.\n            \"condition\": {\n\n                # An alias to a crate target.     # The label of the crate target the\n                # Aliases are only crate names.   # package name refers to.\n                \"package_name\":                   \"@full//:label\",\n            }\n        }\n    }\n    ```\n\n    Args:\n        all_dependency_maps (list): A list of dicts as described above\n\n    Returns:\n        dict: A dictionary as described above\n    \"\"\"\n    dependencies = {}\n\n    for workspace_deps_map in all_dependency_maps:\n        for pkg_name, conditional_deps_map in workspace_deps_map.items():\n            if pkg_name not in dependencies:\n                non_frozen_map = dict()\n                for key, values in conditional_deps_map.items():\n                    non_frozen_map.update({key: dict(values.items())})\n                dependencies.setdefault(pkg_name, non_frozen_map)\n                continue\n\n            for condition, deps_map in conditional_deps_map.items():\n                # If the condition has not been recorded, do so and continue\n                if condition not in dependencies[pkg_name]:\n                    dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n                    continue\n\n                # Alert on any miss-matched dependencies\n                inconsistent_entries = []\n                for crate_name, crate_label in deps_map.items():\n                    existing = dependencies[pkg_name][condition].get(crate_name)\n                    if existing and existing != crate_label:\n                        inconsistent_entries.append((crate_name, existing, crate_label))\n                    dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n    return dependencies\n\ndef crate_deps(deps, package_name = None):\n    \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n    Args:\n        deps (list): The desired list of crate targets.\n        package_name (str, optional): The package name of the set of dependencies to look up.\n            Defaults to `native.package_name()`.\n\n    Returns:\n        list: A list of labels to generated rust targets (str)\n    \"\"\"\n\n    if not deps:\n        return []\n\n    if package_name == None:\n        package_name = native.package_name()\n\n    # Join both sets of dependencies\n    dependencies = _flatten_dependency_maps([\n        _NORMAL_DEPENDENCIES,\n        _NORMAL_DEV_DEPENDENCIES,\n        _PROC_MACRO_DEPENDENCIES,\n        _PROC_MACRO_DEV_DEPENDENCIES,\n        _BUILD_DEPENDENCIES,\n        _BUILD_PROC_MACRO_DEPENDENCIES,\n    ]).pop(package_name, {})\n\n    # Combine all conditional packages so we can easily index over a flat list\n    # TODO: Perhaps this should actually return select statements and maintain\n    # the conditionals of the dependencies\n    flat_deps = {}\n    for deps_set in dependencies.values():\n        for crate_name, crate_label in deps_set.items():\n            flat_deps.update({crate_name: crate_label})\n\n    missing_crates = []\n    crate_targets = []\n    for crate_target in deps:\n        if crate_target not in flat_deps:\n            missing_crates.append(crate_target)\n        else:\n            crate_targets.append(flat_deps[crate_target])\n\n    if missing_crates:\n        fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n            missing_crates,\n            package_name,\n            dependencies,\n        ))\n\n    return crate_targets\n\ndef all_crate_deps(\n        normal = False, \n        normal_dev = False, \n        proc_macro = False, \n        proc_macro_dev = False,\n        build = False,\n        build_proc_macro = False,\n        package_name = None):\n    \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n    for the package where this macro is called.\n\n    If no parameters are set, all normal dependencies are returned. Setting any one flag will\n    otherwise impact the contents of the returned list.\n\n    Args:\n        normal (bool, optional): If True, normal dependencies are included in the\n            output list.\n        normal_dev (bool, optional): If True, normal dev dependencies will be\n            included in the output list..\n        proc_macro (bool, optional): If True, proc_macro dependencies are included\n            in the output list.\n        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n            included in the output list.\n        build (bool, optional): If True, build dependencies are included\n            in the output list.\n        build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n            included in the output list.\n        package_name (str, optional): The package name of the set of dependencies to look up.\n            Defaults to `native.package_name()` when unset.\n\n    Returns:\n        list: A list of labels to generated rust targets (str)\n    \"\"\"\n\n    if package_name == None:\n        package_name = native.package_name()\n\n    # Determine the relevant maps to use\n    all_dependency_maps = []\n    if normal:\n        all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n    if normal_dev:\n        all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n    if proc_macro:\n        all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n    if proc_macro_dev:\n        all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n    if build:\n        all_dependency_maps.append(_BUILD_DEPENDENCIES)\n    if build_proc_macro:\n        all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n    # Default to always using normal dependencies\n    if not all_dependency_maps:\n        all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n    dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n    if not dependencies:\n        if dependencies == None:\n            fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n        else:\n            return []\n\n    crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n    for condition, deps in dependencies.items():\n        crate_deps += selects.with_or({\n            tuple(_CONDITIONS[condition]): deps.values(),\n            \"//conditions:default\": [],\n        })\n\n    return crate_deps\n\ndef aliases(\n        normal = False,\n        normal_dev = False,\n        proc_macro = False,\n        proc_macro_dev = False,\n        build = False,\n        build_proc_macro = False,\n        package_name = None):\n    \"\"\"Produces a map of Crate alias names to their original label\n\n    If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n    Setting any one flag will otherwise determine the contents of the returned dict.\n\n    Args:\n        normal (bool, optional): If True, normal dependencies are included in the\n            output list.\n        normal_dev (bool, optional): If True, normal dev dependencies will be\n            included in the output list..\n        proc_macro (bool, optional): If True, proc_macro dependencies are included\n            in the output list.\n        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n            included in the output list.\n        build (bool, optional): If True, build dependencies are included\n            in the output list.\n        build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n            included in the output list.\n        package_name (str, optional): The package name of the set of dependencies to look up.\n            Defaults to `native.package_name()` when unset.\n\n    Returns:\n        dict: The aliases of all associated packages\n    \"\"\"\n    if package_name == None:\n        package_name = native.package_name()\n\n    # Determine the relevant maps to use\n    all_aliases_maps = []\n    if normal:\n        all_aliases_maps.append(_NORMAL_ALIASES)\n    if normal_dev:\n        all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n    if proc_macro:\n        all_aliases_maps.append(_PROC_MACRO_ALIASES)\n    if proc_macro_dev:\n        all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n    if build:\n        all_aliases_maps.append(_BUILD_ALIASES)\n    if build_proc_macro:\n        all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n    # Default to always using normal aliases\n    if not all_aliases_maps:\n        all_aliases_maps.append(_NORMAL_ALIASES)\n        all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n    aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n    if not aliases:\n        return dict()\n\n    common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n    # If there are only common items in the dictionary, immediately return them\n    if not len(aliases.keys()) == 1:\n        return dict(common_items)\n\n    # Build a single select statement where each conditional has accounted for the\n    # common set of aliases.\n    crate_aliases = {\"//conditions:default\": dict(common_items)}\n    for condition, deps in aliases.items():\n        condition_triples = _CONDITIONS[condition]\n        for triple in condition_triples:\n            if triple in crate_aliases:\n                crate_aliases[triple].update(deps)\n            else:\n                crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n    return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n    \"third_party/crates_io\": {\n        _COMMON_CONDITION: {\n            \"aes\": Label(\"@rust_crates//:aes-0.8.4\"),\n            \"aes-gcm\": Label(\"@rust_crates//:aes-gcm-0.10.3\"),\n            \"aligned\": Label(\"@rust_crates//:aligned-0.4.3\"),\n            \"anyhow\": Label(\"@rust_crates//:anyhow-1.0.102\"),\n            \"bitfield\": Label(\"@rust_crates//:bitfield-0.14.0\"),\n            \"bitflags\": Label(\"@rust_crates//:bitflags-2.11.1\"),\n            \"byteorder\": Label(\"@rust_crates//:byteorder-1.5.0\"),\n            \"cfg-if\": Label(\"@rust_crates//:cfg-if-1.0.4\"),\n            \"cipher\": Label(\"@rust_crates//:cipher-0.4.4\"),\n            \"clap\": Label(\"@rust_crates//:clap-4.6.1\"),\n            \"compiler_builtins\": Label(\"@rust_crates//:compiler_builtins-0.1.160\"),\n            \"cortex-m\": Label(\"@rust_crates//:cortex-m-0.7.7\"),\n            \"cortex-m-rt\": Label(\"@rust_crates//:cortex-m-rt-0.7.5\"),\n            \"cortex-m-semihosting\": Label(\"@rust_crates//:cortex-m-semihosting-0.5.0\"),\n            \"ctr\": Label(\"@rust_crates//:ctr-0.9.2\"),\n            \"ecdsa\": Label(\"@rust_crates//:ecdsa-0.16.9\"),\n            \"embedded-hal\": Label(\"@rust_crates//:embedded-hal-1.0.0\"),\n            \"embedded-hal-async\": Label(\"@rust_crates//:embedded-hal-async-1.0.0\"),\n            \"embedded-hal-nb\": Label(\"@rust_crates//:embedded-hal-nb-1.0.0\"),\n            \"embedded-io\": Label(\"@rust_crates//:embedded-io-0.6.1\"),\n            \"fugit\": Label(\"@rust_crates//:fugit-0.3.9\"),\n            \"futures\": Label(\"@rust_crates//:futures-0.3.32\"),\n            \"heapless\": Label(\"@rust_crates//:heapless-0.9.2\"),\n            \"hex\": Label(\"@rust_crates//:hex-0.4.3\"),\n            \"hex-literal\": Label(\"@rust_crates//:hex-literal-0.4.1\"),\n            \"hmac\": Label(\"@rust_crates//:hmac-0.12.1\"),\n            \"k256\": Label(\"@rust_crates//:k256-0.13.4\"),\n            \"log\": Label(\"@rust_crates//:log-0.4.29\"),\n            \"mctp\": Label(\"@rust_crates//:mctp-0.2.0\"),\n            \"mctp-lib\": Label(\"@rust_crates//:mctp-lib-0.1.0\"),\n            \"memoffset\": Label(\"@rust_crates//:memoffset-0.9.1\"),\n            \"minijinja\": Label(\"@rust_crates//:minijinja-2.19.0\"),\n            \"nb\": Label(\"@rust_crates//:nb-1.1.0\"),\n            \"nom\": Label(\"@rust_crates//:nom-7.1.3\"),\n            \"object\": Label(\"@rust_crates//:object-0.37.3\"),\n            \"openprot-hal-blocking\": Label(\"@rust_crates//:openprot-hal-blocking-0.1.0\"),\n            \"p256\": Label(\"@rust_crates//:p256-0.13.2\"),\n            \"p384\": Label(\"@rust_crates//:p384-0.13.1\"),\n            \"panic-halt\": Label(\"@rust_crates//:panic-halt-1.0.0\"),\n            \"proc-macro2\": Label(\"@rust_crates//:proc-macro2-1.0.106\"),\n            \"proposed-traits\": Label(\"@rust_crates//:proposed-traits-0.1.0\"),\n            \"prost\": Label(\"@rust_crates//:prost-0.13.5\"),\n            \"quote\": Label(\"@rust_crates//:quote-1.0.45\"),\n            \"rand_core\": Label(\"@rust_crates//:rand_core-0.9.5\"),\n            \"riscv\": Label(\"@rust_crates//:riscv-0.12.1\"),\n            \"riscv-rt\": Label(\"@rust_crates//:riscv-rt-0.12.2\"),\n            \"riscv-semihosting\": Label(\"@rust_crates//:riscv-semihosting-0.1.3\"),\n            \"rustc-demangle\": Label(\"@rust_crates//:rustc-demangle-0.1.27\"),\n            \"sec1\": Label(\"@rust_crates//:sec1-0.7.3\"),\n            \"serde\": Label(\"@rust_crates//:serde-1.0.228\"),\n            \"serde_json5\": Label(\"@rust_crates//:serde_json5-0.2.1\"),\n            \"sha2\": Label(\"@rust_crates//:sha2-0.10.9\"),\n            \"sha3\": Label(\"@rust_crates//:sha3-0.10.9\"),\n            \"smlang\": Label(\"@rust_crates//:smlang-0.8.0\"),\n            \"subtle\": Label(\"@rust_crates//:subtle-2.6.1\"),\n            \"syn1\": Label(\"@rust_crates//:syn-1.0.109\"),\n            \"syn\": Label(\"@rust_crates//:syn-2.0.117\"),\n            \"thiserror\": Label(\"@rust_crates//:thiserror-2.0.18\"),\n            \"tock-registers\": Label(\"@rust_crates//:tock-registers-0.9.0\"),\n            \"tokio\": Label(\"@rust_crates//:tokio-1.52.1\"),\n            \"tokio-util\": Label(\"@rust_crates//:tokio-util-0.7.18\"),\n            \"vcell\": Label(\"@rust_crates//:vcell-0.1.3\"),\n            \"zerocopy\": Label(\"@rust_crates//:zerocopy-0.8.48\"),\n            \"zeroize\": Label(\"@rust_crates//:zeroize-1.8.2\"),\n        },\n    },\n}\n\n\n_NORMAL_ALIASES = {\n    \"third_party/crates_io\": {\n        _COMMON_CONDITION: {\n            Label(\"@rust_crates//:syn-1.0.109\"): \"syn1\",\n        },\n    },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n    \"third_party/crates_io\": {\n        _COMMON_CONDITION: {\n            \"bitfield-struct\": Label(\"@rust_crates//:bitfield-struct-0.11.0\"),\n            \"paste\": Label(\"@rust_crates//:paste-1.0.15\"),\n            \"serde_derive\": Label(\"@rust_crates//:serde_derive-1.0.228\"),\n        },\n    },\n}\n\n\n_PROC_MACRO_ALIASES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_BUILD_DEPENDENCIES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_BUILD_ALIASES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_CONDITIONS = {\n    \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n    \"aarch64-linux-android\": [],\n    \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n    \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [],\n    \"cfg(all(not(rustix_use_libc), not(miri), target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\",\"@rules_rust//rust/platform:thumbv7em-none-eabi\",\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n    \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n    \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n    \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n    \"cfg(any())\": [],\n    \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(any(target_arch = \\\"arm\\\", target_pointer_width = \\\"32\\\", target_pointer_width = \\\"64\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\",\"@rules_rust//rust/platform:thumbv7em-none-eabi\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(any(unix, target_os = \\\"hermit\\\", target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(any(unix, target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(target_arch = \\\"aarch64\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n    \"cfg(target_os = \\\"hermit\\\")\": [],\n    \"cfg(target_os = \\\"redox\\\")\": [],\n    \"cfg(target_os = \\\"wasi\\\")\": [],\n    \"cfg(unix)\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(windows)\": [],\n    \"riscv32imc-unknown-none-elf\": [\"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\"],\n    \"thumbv7em-none-eabi\": [\"@rules_rust//rust/platform:thumbv7em-none-eabi\"],\n    \"x86_64-apple-darwin\": [\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n    \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n    \"\"\"A macro for defining repositories for all generated crates.\n\n    Returns:\n      A list of repos visible to the module through the module extension.\n    \"\"\"\n    maybe(\n        http_archive,\n        name = \"rust_crates__adler2-2.0.1\",\n        sha256 = \"320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/adler2/2.0.1/download\"],\n        strip_prefix = \"adler2-2.0.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.adler2-2.0.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__aead-0.5.2\",\n        sha256 = \"d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aead/0.5.2/download\"],\n        strip_prefix = \"aead-0.5.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.aead-0.5.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__aes-0.8.4\",\n        sha256 = \"b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aes/0.8.4/download\"],\n        strip_prefix = \"aes-0.8.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.aes-0.8.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__aes-gcm-0.10.3\",\n        sha256 = \"831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aes-gcm/0.10.3/download\"],\n        strip_prefix = \"aes-gcm-0.10.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.aes-gcm-0.10.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__aligned-0.4.3\",\n        sha256 = \"ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aligned/0.4.3/download\"],\n        strip_prefix = \"aligned-0.4.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.aligned-0.4.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__anstream-1.0.0\",\n        sha256 = \"824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/anstream/1.0.0/download\"],\n        strip_prefix = \"anstream-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.anstream-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__anstyle-1.0.14\",\n        sha256 = \"940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/anstyle/1.0.14/download\"],\n        strip_prefix = \"anstyle-1.0.14\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.anstyle-1.0.14.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__anstyle-parse-1.0.0\",\n        sha256 = \"52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/anstyle-parse/1.0.0/download\"],\n        strip_prefix = \"anstyle-parse-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.anstyle-parse-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__anstyle-query-1.1.5\",\n        sha256 = \"40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/anstyle-query/1.1.5/download\"],\n        strip_prefix = \"anstyle-query-1.1.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.anstyle-query-1.1.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__anstyle-wincon-3.0.11\",\n        sha256 = \"291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.11/download\"],\n        strip_prefix = \"anstyle-wincon-3.0.11\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.anstyle-wincon-3.0.11.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__anyhow-1.0.102\",\n        sha256 = \"7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/anyhow/1.0.102/download\"],\n        strip_prefix = \"anyhow-1.0.102\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.anyhow-1.0.102.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__as-slice-0.2.1\",\n        sha256 = \"516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/as-slice/0.2.1/download\"],\n        strip_prefix = \"as-slice-0.2.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.as-slice-0.2.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__async-trait-0.1.89\",\n        sha256 = \"9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/async-trait/0.1.89/download\"],\n        strip_prefix = \"async-trait-0.1.89\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.async-trait-0.1.89.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__autocfg-1.5.0\",\n        sha256 = \"c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/autocfg/1.5.0/download\"],\n        strip_prefix = \"autocfg-1.5.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.autocfg-1.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__bare-metal-0.2.5\",\n        sha256 = \"5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bare-metal/0.2.5/download\"],\n        strip_prefix = \"bare-metal-0.2.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.bare-metal-0.2.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__base16ct-0.2.0\",\n        sha256 = \"4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/base16ct/0.2.0/download\"],\n        strip_prefix = \"base16ct-0.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.base16ct-0.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__bitfield-0.13.2\",\n        sha256 = \"46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitfield/0.13.2/download\"],\n        strip_prefix = \"bitfield-0.13.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.bitfield-0.13.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__bitfield-0.14.0\",\n        sha256 = \"2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitfield/0.14.0/download\"],\n        strip_prefix = \"bitfield-0.14.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.bitfield-0.14.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__bitfield-struct-0.11.0\",\n        sha256 = \"d3ca019570363e800b05ad4fd890734f28ac7b72f563ad8a35079efb793616f8\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitfield-struct/0.11.0/download\"],\n        strip_prefix = \"bitfield-struct-0.11.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.bitfield-struct-0.11.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__bitflags-2.11.1\",\n        sha256 = \"c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitflags/2.11.1/download\"],\n        strip_prefix = \"bitflags-2.11.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.bitflags-2.11.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__block-buffer-0.10.4\",\n        sha256 = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/block-buffer/0.10.4/download\"],\n        strip_prefix = \"block-buffer-0.10.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.block-buffer-0.10.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__byteorder-1.5.0\",\n        sha256 = \"1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/byteorder/1.5.0/download\"],\n        strip_prefix = \"byteorder-1.5.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.byteorder-1.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__bytes-1.11.1\",\n        sha256 = \"1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bytes/1.11.1/download\"],\n        strip_prefix = \"bytes-1.11.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.bytes-1.11.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cfg-if-1.0.4\",\n        sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n        strip_prefix = \"cfg-if-1.0.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cfg-if-1.0.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cipher-0.4.4\",\n        sha256 = \"773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cipher/0.4.4/download\"],\n        strip_prefix = \"cipher-0.4.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cipher-0.4.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__clap-4.6.1\",\n        sha256 = \"1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/clap/4.6.1/download\"],\n        strip_prefix = \"clap-4.6.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.clap-4.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__clap_builder-4.6.0\",\n        sha256 = \"714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/clap_builder/4.6.0/download\"],\n        strip_prefix = \"clap_builder-4.6.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.clap_builder-4.6.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__clap_derive-4.6.1\",\n        sha256 = \"f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/clap_derive/4.6.1/download\"],\n        strip_prefix = \"clap_derive-4.6.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.clap_derive-4.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__clap_lex-1.1.0\",\n        sha256 = \"c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/clap_lex/1.1.0/download\"],\n        strip_prefix = \"clap_lex-1.1.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.clap_lex-1.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__colorchoice-1.0.5\",\n        sha256 = \"1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/colorchoice/1.0.5/download\"],\n        strip_prefix = \"colorchoice-1.0.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.colorchoice-1.0.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__compiler_builtins-0.1.160\",\n        sha256 = \"6376049cfa92c0aa8b9ac95fae22184b981c658208d4ed8a1dc553cd83612895\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/compiler_builtins/0.1.160/download\"],\n        strip_prefix = \"compiler_builtins-0.1.160\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.compiler_builtins-0.1.160.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__const-oid-0.9.6\",\n        sha256 = \"c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/const-oid/0.9.6/download\"],\n        strip_prefix = \"const-oid-0.9.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.const-oid-0.9.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cortex-m-0.7.7\",\n        sha256 = \"8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m/0.7.7/download\"],\n        strip_prefix = \"cortex-m-0.7.7\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cortex-m-0.7.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cortex-m-rt-0.7.5\",\n        sha256 = \"801d4dec46b34c299ccf6b036717ae0fce602faa4f4fe816d9013b9a7c9f5ba6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m-rt/0.7.5/download\"],\n        strip_prefix = \"cortex-m-rt-0.7.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cortex-m-rt-0.7.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cortex-m-rt-macros-0.7.5\",\n        sha256 = \"e37549a379a9e0e6e576fd208ee60394ccb8be963889eebba3ffe0980364f472\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m-rt-macros/0.7.5/download\"],\n        strip_prefix = \"cortex-m-rt-macros-0.7.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cortex-m-rt-macros-0.7.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cortex-m-semihosting-0.5.0\",\n        sha256 = \"c23234600452033cc77e4b761e740e02d2c4168e11dbf36ab14a0f58973592b0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m-semihosting/0.5.0/download\"],\n        strip_prefix = \"cortex-m-semihosting-0.5.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cortex-m-semihosting-0.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cpufeatures-0.2.17\",\n        sha256 = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cpufeatures/0.2.17/download\"],\n        strip_prefix = \"cpufeatures-0.2.17\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cpufeatures-0.2.17.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__crc-3.4.0\",\n        sha256 = \"5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crc/3.4.0/download\"],\n        strip_prefix = \"crc-3.4.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.crc-3.4.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__crc-catalog-2.5.0\",\n        sha256 = \"217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crc-catalog/2.5.0/download\"],\n        strip_prefix = \"crc-catalog-2.5.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.crc-catalog-2.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__crc32fast-1.5.0\",\n        sha256 = \"9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crc32fast/1.5.0/download\"],\n        strip_prefix = \"crc32fast-1.5.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.crc32fast-1.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__critical-section-1.2.0\",\n        sha256 = \"790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/critical-section/1.2.0/download\"],\n        strip_prefix = \"critical-section-1.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.critical-section-1.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__crypto-bigint-0.5.5\",\n        sha256 = \"0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crypto-bigint/0.5.5/download\"],\n        strip_prefix = \"crypto-bigint-0.5.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.crypto-bigint-0.5.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__crypto-common-0.1.7\",\n        sha256 = \"78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crypto-common/0.1.7/download\"],\n        strip_prefix = \"crypto-common-0.1.7\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.crypto-common-0.1.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__ctr-0.9.2\",\n        sha256 = \"0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ctr/0.9.2/download\"],\n        strip_prefix = \"ctr-0.9.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.ctr-0.9.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__der-0.7.10\",\n        sha256 = \"e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/der/0.7.10/download\"],\n        strip_prefix = \"der-0.7.10\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.der-0.7.10.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__digest-0.10.7\",\n        sha256 = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/digest/0.10.7/download\"],\n        strip_prefix = \"digest-0.10.7\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.digest-0.10.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__ecdsa-0.16.9\",\n        sha256 = \"ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ecdsa/0.16.9/download\"],\n        strip_prefix = \"ecdsa-0.16.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.ecdsa-0.16.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__either-1.15.0\",\n        sha256 = \"48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/either/1.15.0/download\"],\n        strip_prefix = \"either-1.15.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.either-1.15.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__elliptic-curve-0.13.8\",\n        sha256 = \"b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/elliptic-curve/0.13.8/download\"],\n        strip_prefix = \"elliptic-curve-0.13.8\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.elliptic-curve-0.13.8.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-crc-macros-1.0.0\",\n        sha256 = \"4f1c75747a43b086df1a87fb2a889590bc0725e0abf54bba6d0c4bf7bd9e762c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-crc-macros/1.0.0/download\"],\n        strip_prefix = \"embedded-crc-macros-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-crc-macros-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-hal-0.2.7\",\n        sha256 = \"35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-hal/0.2.7/download\"],\n        strip_prefix = \"embedded-hal-0.2.7\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-hal-0.2.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-hal-1.0.0\",\n        sha256 = \"361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-hal/1.0.0/download\"],\n        strip_prefix = \"embedded-hal-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-hal-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-hal-async-1.0.0\",\n        sha256 = \"0c4c685bbef7fe13c3c6dd4da26841ed3980ef33e841cddfa15ce8a8fb3f1884\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-hal-async/1.0.0/download\"],\n        strip_prefix = \"embedded-hal-async-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-hal-async-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-hal-nb-1.0.0\",\n        sha256 = \"fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-hal-nb/1.0.0/download\"],\n        strip_prefix = \"embedded-hal-nb-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-hal-nb-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-io-0.6.1\",\n        sha256 = \"edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-io/0.6.1/download\"],\n        strip_prefix = \"embedded-io-0.6.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-io-0.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-io-async-0.6.1\",\n        sha256 = \"3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-io-async/0.6.1/download\"],\n        strip_prefix = \"embedded-io-async-0.6.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-io-async-0.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-storage-0.3.1\",\n        sha256 = \"a21dea9854beb860f3062d10228ce9b976da520a73474aed3171ec276bc0c032\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-storage/0.3.1/download\"],\n        strip_prefix = \"embedded-storage-0.3.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-storage-0.3.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__equivalent-1.0.2\",\n        sha256 = \"877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/equivalent/1.0.2/download\"],\n        strip_prefix = \"equivalent-1.0.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.equivalent-1.0.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__errno-0.3.14\",\n        sha256 = \"39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/errno/0.3.14/download\"],\n        strip_prefix = \"errno-0.3.14\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.errno-0.3.14.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__ff-0.13.1\",\n        sha256 = \"c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ff/0.13.1/download\"],\n        strip_prefix = \"ff-0.13.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.ff-0.13.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__flate2-1.1.9\",\n        sha256 = \"843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/flate2/1.1.9/download\"],\n        strip_prefix = \"flate2-1.1.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.flate2-1.1.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__foldhash-0.1.5\",\n        sha256 = \"d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/foldhash/0.1.5/download\"],\n        strip_prefix = \"foldhash-0.1.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.foldhash-0.1.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__fugit-0.3.9\",\n        sha256 = \"4e639847d312d9a82d2e75b0edcc1e934efcc64e6cb7aa94f0b1fbec0bc231d6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/fugit/0.3.9/download\"],\n        strip_prefix = \"fugit-0.3.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.fugit-0.3.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-0.3.32\",\n        sha256 = \"8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures/0.3.32/download\"],\n        strip_prefix = \"futures-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-channel-0.3.32\",\n        sha256 = \"07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-channel/0.3.32/download\"],\n        strip_prefix = \"futures-channel-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-channel-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-core-0.3.32\",\n        sha256 = \"7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-core/0.3.32/download\"],\n        strip_prefix = \"futures-core-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-core-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-executor-0.3.32\",\n        sha256 = \"baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-executor/0.3.32/download\"],\n        strip_prefix = \"futures-executor-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-executor-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-io-0.3.32\",\n        sha256 = \"cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-io/0.3.32/download\"],\n        strip_prefix = \"futures-io-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-io-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-macro-0.3.32\",\n        sha256 = \"e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-macro/0.3.32/download\"],\n        strip_prefix = \"futures-macro-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-macro-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-sink-0.3.32\",\n        sha256 = \"c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-sink/0.3.32/download\"],\n        strip_prefix = \"futures-sink-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-sink-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-task-0.3.32\",\n        sha256 = \"037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-task/0.3.32/download\"],\n        strip_prefix = \"futures-task-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-task-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-util-0.3.32\",\n        sha256 = \"389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-util/0.3.32/download\"],\n        strip_prefix = \"futures-util-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-util-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__gcd-2.3.0\",\n        sha256 = \"1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/gcd/2.3.0/download\"],\n        strip_prefix = \"gcd-2.3.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.gcd-2.3.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__generic-array-0.14.7\",\n        sha256 = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/generic-array/0.14.7/download\"],\n        strip_prefix = \"generic-array-0.14.7\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.generic-array-0.14.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__ghash-0.5.1\",\n        sha256 = \"f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ghash/0.5.1/download\"],\n        strip_prefix = \"ghash-0.5.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.ghash-0.5.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__group-0.13.0\",\n        sha256 = \"f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/group/0.13.0/download\"],\n        strip_prefix = \"group-0.13.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.group-0.13.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__hash32-0.3.1\",\n        sha256 = \"47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hash32/0.3.1/download\"],\n        strip_prefix = \"hash32-0.3.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.hash32-0.3.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__hashbrown-0.15.5\",\n        sha256 = \"9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hashbrown/0.15.5/download\"],\n        strip_prefix = \"hashbrown-0.15.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.hashbrown-0.15.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__hashbrown-0.17.0\",\n        sha256 = \"4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hashbrown/0.17.0/download\"],\n        strip_prefix = \"hashbrown-0.17.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.hashbrown-0.17.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__heapless-0.8.0\",\n        sha256 = \"0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/heapless/0.8.0/download\"],\n        strip_prefix = \"heapless-0.8.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.heapless-0.8.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__heapless-0.9.2\",\n        sha256 = \"2af2455f757db2b292a9b1768c4b70186d443bcb3b316252d6b540aec1cd89ed\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/heapless/0.9.2/download\"],\n        strip_prefix = \"heapless-0.9.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.heapless-0.9.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__heck-0.5.0\",\n        sha256 = \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/heck/0.5.0/download\"],\n        strip_prefix = \"heck-0.5.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.heck-0.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__hex-0.4.3\",\n        sha256 = \"7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hex/0.4.3/download\"],\n        strip_prefix = \"hex-0.4.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.hex-0.4.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__hex-literal-0.4.1\",\n        sha256 = \"6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hex-literal/0.4.1/download\"],\n        strip_prefix = \"hex-literal-0.4.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.hex-literal-0.4.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__hmac-0.12.1\",\n        sha256 = \"6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hmac/0.12.1/download\"],\n        strip_prefix = \"hmac-0.12.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.hmac-0.12.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__indexmap-2.14.0\",\n        sha256 = \"d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/indexmap/2.14.0/download\"],\n        strip_prefix = \"indexmap-2.14.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.indexmap-2.14.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__inout-0.1.4\",\n        sha256 = \"879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/inout/0.1.4/download\"],\n        strip_prefix = \"inout-0.1.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.inout-0.1.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__is_terminal_polyfill-1.70.2\",\n        sha256 = \"a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.2/download\"],\n        strip_prefix = \"is_terminal_polyfill-1.70.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.is_terminal_polyfill-1.70.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__itertools-0.14.0\",\n        sha256 = \"2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/itertools/0.14.0/download\"],\n        strip_prefix = \"itertools-0.14.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.itertools-0.14.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__k256-0.13.4\",\n        sha256 = \"f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/k256/0.13.4/download\"],\n        strip_prefix = \"k256-0.13.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.k256-0.13.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__keccak-0.1.6\",\n        sha256 = \"cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/keccak/0.1.6/download\"],\n        strip_prefix = \"keccak-0.1.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.keccak-0.1.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__libc-0.2.186\",\n        sha256 = \"68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/libc/0.2.186/download\"],\n        strip_prefix = \"libc-0.2.186\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.libc-0.2.186.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__linux-raw-sys-0.12.1\",\n        sha256 = \"32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/linux-raw-sys/0.12.1/download\"],\n        strip_prefix = \"linux-raw-sys-0.12.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.linux-raw-sys-0.12.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__lock_api-0.4.14\",\n        sha256 = \"224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/lock_api/0.4.14/download\"],\n        strip_prefix = \"lock_api-0.4.14\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.lock_api-0.4.14.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__log-0.4.29\",\n        sha256 = \"5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/log/0.4.29/download\"],\n        strip_prefix = \"log-0.4.29\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.log-0.4.29.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"rust_crates__mctp-0.2.0\",\n        commit = \"114dee1a7cfbae601ce11901b20516ebe217a4b2\",\n        init_submodules = True,\n        remote = \"https://github.com/CodeConstruct/mctp-rs.git\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.mctp-0.2.0.bazel\"),\n        strip_prefix = \"mctp\",\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"rust_crates__mctp-estack-0.1.0\",\n        commit = \"114dee1a7cfbae601ce11901b20516ebe217a4b2\",\n        init_submodules = True,\n        remote = \"https://github.com/CodeConstruct/mctp-rs.git\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.mctp-estack-0.1.0.bazel\"),\n        strip_prefix = \"mctp-estack\",\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"rust_crates__mctp-lib-0.1.0\",\n        commit = \"742fa0e991aa2b87509ff12739e011a674643d91\",\n        init_submodules = True,\n        remote = \"https://github.com/OpenPRoT/mctp-lib.git\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.mctp-lib-0.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__memchr-2.8.0\",\n        sha256 = \"f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/memchr/2.8.0/download\"],\n        strip_prefix = \"memchr-2.8.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.memchr-2.8.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__memo-map-0.3.3\",\n        sha256 = \"38d1115007560874e373613744c6fba374c17688327a71c1476d1a5954cc857b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/memo-map/0.3.3/download\"],\n        strip_prefix = \"memo-map-0.3.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.memo-map-0.3.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__memoffset-0.9.1\",\n        sha256 = \"488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/memoffset/0.9.1/download\"],\n        strip_prefix = \"memoffset-0.9.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.memoffset-0.9.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__minijinja-2.19.0\",\n        sha256 = \"805bfd7352166bae857ee569628b52bcd85a1cecf7810861ebceb1686b72b75d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/minijinja/2.19.0/download\"],\n        strip_prefix = \"minijinja-2.19.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.minijinja-2.19.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__minimal-lexical-0.2.1\",\n        sha256 = \"68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/minimal-lexical/0.2.1/download\"],\n        strip_prefix = \"minimal-lexical-0.2.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.minimal-lexical-0.2.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__miniz_oxide-0.8.9\",\n        sha256 = \"1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/miniz_oxide/0.8.9/download\"],\n        strip_prefix = \"miniz_oxide-0.8.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.miniz_oxide-0.8.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__mio-1.2.0\",\n        sha256 = \"50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/mio/1.2.0/download\"],\n        strip_prefix = \"mio-1.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.mio-1.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__nb-0.1.3\",\n        sha256 = \"801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/nb/0.1.3/download\"],\n        strip_prefix = \"nb-0.1.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.nb-0.1.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__nb-1.1.0\",\n        sha256 = \"8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/nb/1.1.0/download\"],\n        strip_prefix = \"nb-1.1.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.nb-1.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__nom-7.1.3\",\n        sha256 = \"d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/nom/7.1.3/download\"],\n        strip_prefix = \"nom-7.1.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.nom-7.1.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__object-0.37.3\",\n        sha256 = \"ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/object/0.37.3/download\"],\n        strip_prefix = \"object-0.37.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.object-0.37.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__once_cell_polyfill-1.70.2\",\n        sha256 = \"384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.2/download\"],\n        strip_prefix = \"once_cell_polyfill-1.70.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.once_cell_polyfill-1.70.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__opaque-debug-0.3.1\",\n        sha256 = \"c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/opaque-debug/0.3.1/download\"],\n        strip_prefix = \"opaque-debug-0.3.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.opaque-debug-0.3.1.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"rust_crates__openprot-hal-blocking-0.1.0\",\n        commit = \"c6cd23a56f3cc7945b062ea1bcdabf3af0dba82d\",\n        init_submodules = True,\n        remote = \"https://github.com/rusty1968/openprot.git\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.openprot-hal-blocking-0.1.0.bazel\"),\n        strip_prefix = \"hal/blocking\",\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__p256-0.13.2\",\n        sha256 = \"c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/p256/0.13.2/download\"],\n        strip_prefix = \"p256-0.13.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.p256-0.13.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__p384-0.13.1\",\n        sha256 = \"fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/p384/0.13.1/download\"],\n        strip_prefix = \"p384-0.13.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.p384-0.13.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__panic-halt-1.0.0\",\n        sha256 = \"a513e167849a384b7f9b746e517604398518590a9142f4846a32e3c2a4de7b11\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/panic-halt/1.0.0/download\"],\n        strip_prefix = \"panic-halt-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.panic-halt-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__parking_lot-0.12.5\",\n        sha256 = \"93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/parking_lot/0.12.5/download\"],\n        strip_prefix = \"parking_lot-0.12.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.parking_lot-0.12.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__parking_lot_core-0.9.12\",\n        sha256 = \"2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/parking_lot_core/0.9.12/download\"],\n        strip_prefix = \"parking_lot_core-0.9.12\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.parking_lot_core-0.9.12.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__paste-1.0.15\",\n        sha256 = \"57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/paste/1.0.15/download\"],\n        strip_prefix = \"paste-1.0.15\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.paste-1.0.15.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__pest-2.8.6\",\n        sha256 = \"e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/pest/2.8.6/download\"],\n        strip_prefix = \"pest-2.8.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.pest-2.8.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__pest_derive-2.8.6\",\n        sha256 = \"11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/pest_derive/2.8.6/download\"],\n        strip_prefix = \"pest_derive-2.8.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.pest_derive-2.8.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__pest_generator-2.8.6\",\n        sha256 = \"8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/pest_generator/2.8.6/download\"],\n        strip_prefix = \"pest_generator-2.8.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.pest_generator-2.8.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__pest_meta-2.8.6\",\n        sha256 = \"89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/pest_meta/2.8.6/download\"],\n        strip_prefix = \"pest_meta-2.8.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.pest_meta-2.8.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__pin-project-lite-0.2.17\",\n        sha256 = \"a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.17/download\"],\n        strip_prefix = \"pin-project-lite-0.2.17\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.pin-project-lite-0.2.17.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__polyval-0.6.2\",\n        sha256 = \"9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/polyval/0.6.2/download\"],\n        strip_prefix = \"polyval-0.6.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.polyval-0.6.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__primeorder-0.13.6\",\n        sha256 = \"353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/primeorder/0.13.6/download\"],\n        strip_prefix = \"primeorder-0.13.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.primeorder-0.13.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__proc-macro2-1.0.106\",\n        sha256 = \"8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/proc-macro2/1.0.106/download\"],\n        strip_prefix = \"proc-macro2-1.0.106\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.proc-macro2-1.0.106.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"rust_crates__proposed-traits-0.1.0\",\n        commit = \"85641310df5a5276c67f81621b104322cff0286c\",\n        init_submodules = True,\n        remote = \"https://github.com/rusty1968/proposed_traits.git\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.proposed-traits-0.1.0.bazel\"),\n        strip_prefix = \"proposed-traits\",\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__prost-0.13.5\",\n        sha256 = \"2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/prost/0.13.5/download\"],\n        strip_prefix = \"prost-0.13.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.prost-0.13.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__prost-derive-0.13.5\",\n        sha256 = \"8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/prost-derive/0.13.5/download\"],\n        strip_prefix = \"prost-derive-0.13.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.prost-derive-0.13.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__quote-1.0.45\",\n        sha256 = \"41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/quote/1.0.45/download\"],\n        strip_prefix = \"quote-1.0.45\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.quote-1.0.45.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__rand_core-0.6.4\",\n        sha256 = \"ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rand_core/0.6.4/download\"],\n        strip_prefix = \"rand_core-0.6.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.rand_core-0.6.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__rand_core-0.9.5\",\n        sha256 = \"76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rand_core/0.9.5/download\"],\n        strip_prefix = \"rand_core-0.9.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.rand_core-0.9.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__redox_syscall-0.5.18\",\n        sha256 = \"ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/redox_syscall/0.5.18/download\"],\n        strip_prefix = \"redox_syscall-0.5.18\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.redox_syscall-0.5.18.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__rfc6979-0.4.0\",\n        sha256 = \"f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rfc6979/0.4.0/download\"],\n        strip_prefix = \"rfc6979-0.4.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.rfc6979-0.4.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-0.11.1\",\n        sha256 = \"2f5c1b8bf41ea746266cdee443d1d1e9125c86ce1447e1a2615abd34330d33a9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv/0.11.1/download\"],\n        strip_prefix = \"riscv-0.11.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-0.11.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-0.12.1\",\n        sha256 = \"5ea8ff73d3720bdd0a97925f0bf79ad2744b6da8ff36be3840c48ac81191d7a7\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv/0.12.1/download\"],\n        strip_prefix = \"riscv-0.12.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-0.12.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-0.13.0\",\n        sha256 = \"afa3cdbeccae4359f6839a00e8b77e5736caa200ba216caf38d24e4c16e2b586\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv/0.13.0/download\"],\n        strip_prefix = \"riscv-0.13.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-0.13.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-macros-0.1.0\",\n        sha256 = \"f265be5d634272320a7de94cea15c22a3bfdd4eb42eb43edc528415f066a1f25\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv-macros/0.1.0/download\"],\n        strip_prefix = \"riscv-macros-0.1.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-macros-0.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-macros-0.2.0\",\n        sha256 = \"e8c4aa1ea1af6dcc83a61be12e8189f9b293c3ba5a487778a4cd89fb060fdbbc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv-macros/0.2.0/download\"],\n        strip_prefix = \"riscv-macros-0.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-macros-0.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-pac-0.2.0\",\n        sha256 = \"8188909339ccc0c68cfb5a04648313f09621e8b87dc03095454f1a11f6c5d436\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv-pac/0.2.0/download\"],\n        strip_prefix = \"riscv-pac-0.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-pac-0.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-rt-0.12.2\",\n        sha256 = \"c0d35e32cf1383183e8885d8a9aa4402a087fd094dc34c2cb6df6687d0229dfe\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv-rt/0.12.2/download\"],\n        strip_prefix = \"riscv-rt-0.12.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-rt-0.12.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-rt-macros-0.2.2\",\n        sha256 = \"30f19a85fe107b65031e0ba8ec60c34c2494069fe910d6c297f5e7cb5a6f76d0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv-rt-macros/0.2.2/download\"],\n        strip_prefix = \"riscv-rt-macros-0.2.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-rt-macros-0.2.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-semihosting-0.1.3\",\n        sha256 = \"1086dd4bcc13de1cb14b93849411e3466de7e5907d2d8eb269032536e93facc6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv-semihosting/0.1.3/download\"],\n        strip_prefix = \"riscv-semihosting-0.1.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-semihosting-0.1.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__rustc-demangle-0.1.27\",\n        sha256 = \"b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rustc-demangle/0.1.27/download\"],\n        strip_prefix = \"rustc-demangle-0.1.27\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.rustc-demangle-0.1.27.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__rustc_version-0.2.3\",\n        sha256 = \"138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rustc_version/0.2.3/download\"],\n        strip_prefix = \"rustc_version-0.2.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.rustc_version-0.2.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__rustix-1.1.4\",\n        sha256 = \"b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rustix/1.1.4/download\"],\n        strip_prefix = \"rustix-1.1.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.rustix-1.1.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__ruzstd-0.8.2\",\n        sha256 = \"e5ff0cc5e135c8870a775d3320910cd9b564ec036b4dc0b8741629020be63f01\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ruzstd/0.8.2/download\"],\n        strip_prefix = \"ruzstd-0.8.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.ruzstd-0.8.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__scopeguard-1.2.0\",\n        sha256 = \"94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/scopeguard/1.2.0/download\"],\n        strip_prefix = \"scopeguard-1.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.scopeguard-1.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__sec1-0.7.3\",\n        sha256 = \"d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/sec1/0.7.3/download\"],\n        strip_prefix = \"sec1-0.7.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.sec1-0.7.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__semver-0.9.0\",\n        sha256 = \"1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/semver/0.9.0/download\"],\n        strip_prefix = \"semver-0.9.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.semver-0.9.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__semver-parser-0.7.0\",\n        sha256 = \"388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/semver-parser/0.7.0/download\"],\n        strip_prefix = \"semver-parser-0.7.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.semver-parser-0.7.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__serde-1.0.228\",\n        sha256 = \"9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/serde/1.0.228/download\"],\n        strip_prefix = \"serde-1.0.228\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.serde-1.0.228.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__serde_core-1.0.228\",\n        sha256 = \"41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/serde_core/1.0.228/download\"],\n        strip_prefix = \"serde_core-1.0.228\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.serde_core-1.0.228.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__serde_derive-1.0.228\",\n        sha256 = \"d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/serde_derive/1.0.228/download\"],\n        strip_prefix = \"serde_derive-1.0.228\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.serde_derive-1.0.228.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__serde_json5-0.2.1\",\n        sha256 = \"5d34d03f54462862f2a42918391c9526337f53171eaa4d8894562be7f252edd3\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/serde_json5/0.2.1/download\"],\n        strip_prefix = \"serde_json5-0.2.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.serde_json5-0.2.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__sha2-0.10.9\",\n        sha256 = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/sha2/0.10.9/download\"],\n        strip_prefix = \"sha2-0.10.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.sha2-0.10.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__sha3-0.10.9\",\n        sha256 = \"77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/sha3/0.10.9/download\"],\n        strip_prefix = \"sha3-0.10.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.sha3-0.10.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__signal-hook-registry-1.4.8\",\n        sha256 = \"c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/signal-hook-registry/1.4.8/download\"],\n        strip_prefix = \"signal-hook-registry-1.4.8\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.signal-hook-registry-1.4.8.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__signature-2.2.0\",\n        sha256 = \"77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/signature/2.2.0/download\"],\n        strip_prefix = \"signature-2.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.signature-2.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__simd-adler32-0.3.9\",\n        sha256 = \"703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/simd-adler32/0.3.9/download\"],\n        strip_prefix = \"simd-adler32-0.3.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.simd-adler32-0.3.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__slab-0.4.12\",\n        sha256 = \"0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/slab/0.4.12/download\"],\n        strip_prefix = \"slab-0.4.12\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.slab-0.4.12.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__smallvec-1.15.1\",\n        sha256 = \"67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/smallvec/1.15.1/download\"],\n        strip_prefix = \"smallvec-1.15.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.smallvec-1.15.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__smbus-pec-1.0.1\",\n        sha256 = \"ca0763a680cd5d72b28f7bfc8a054c117d8841380a6ad4f72f05bd2a34217d3e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/smbus-pec/1.0.1/download\"],\n        strip_prefix = \"smbus-pec-1.0.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.smbus-pec-1.0.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__smlang-0.8.0\",\n        sha256 = \"1de84f9f80bbe6272174e2bfdb8cf7ce4815b218038a42161c2f21c1d872c215\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/smlang/0.8.0/download\"],\n        strip_prefix = \"smlang-0.8.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.smlang-0.8.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__smlang-macros-0.8.0\",\n        sha256 = \"231b4425dcc43afc7e18c34e7c6738cd252d42d91d909c948df14107c9ae79f1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/smlang-macros/0.8.0/download\"],\n        strip_prefix = \"smlang-macros-0.8.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.smlang-macros-0.8.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__socket2-0.6.3\",\n        sha256 = \"3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/socket2/0.6.3/download\"],\n        strip_prefix = \"socket2-0.6.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.socket2-0.6.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__stable_deref_trait-1.2.1\",\n        sha256 = \"6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/stable_deref_trait/1.2.1/download\"],\n        strip_prefix = \"stable_deref_trait-1.2.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.stable_deref_trait-1.2.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__string_morph-0.1.0\",\n        sha256 = \"183aaf7fa637cc7b5f54c45b8f7cb6e8d73831f9f75a56b6defa5bf8c51d1699\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/string_morph/0.1.0/download\"],\n        strip_prefix = \"string_morph-0.1.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.string_morph-0.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__strsim-0.11.1\",\n        sha256 = \"7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/strsim/0.11.1/download\"],\n        strip_prefix = \"strsim-0.11.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.strsim-0.11.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__subtle-2.6.1\",\n        sha256 = \"13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/subtle/2.6.1/download\"],\n        strip_prefix = \"subtle-2.6.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.subtle-2.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__syn-1.0.109\",\n        sha256 = \"72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/syn/1.0.109/download\"],\n        strip_prefix = \"syn-1.0.109\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.syn-1.0.109.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__syn-2.0.117\",\n        sha256 = \"e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/syn/2.0.117/download\"],\n        strip_prefix = \"syn-2.0.117\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.syn-2.0.117.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__terminal_size-0.4.4\",\n        sha256 = \"230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/terminal_size/0.4.4/download\"],\n        strip_prefix = \"terminal_size-0.4.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.terminal_size-0.4.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__thiserror-2.0.18\",\n        sha256 = \"4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/thiserror/2.0.18/download\"],\n        strip_prefix = \"thiserror-2.0.18\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.thiserror-2.0.18.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__thiserror-impl-2.0.18\",\n        sha256 = \"ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/thiserror-impl/2.0.18/download\"],\n        strip_prefix = \"thiserror-impl-2.0.18\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.thiserror-impl-2.0.18.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"rust_crates__tock-registers-0.9.0\",\n        commit = \"9554639b17501a9f5940cef7a1770a0823e790c3\",\n        init_submodules = True,\n        remote = \"https://github.com/tock/tock.git\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.tock-registers-0.9.0.bazel\"),\n        strip_prefix = \"libraries/tock-register-interface\",\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__tokio-1.52.1\",\n        sha256 = \"b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/tokio/1.52.1/download\"],\n        strip_prefix = \"tokio-1.52.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.tokio-1.52.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__tokio-macros-2.7.0\",\n        sha256 = \"385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/tokio-macros/2.7.0/download\"],\n        strip_prefix = \"tokio-macros-2.7.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.tokio-macros-2.7.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__tokio-util-0.7.18\",\n        sha256 = \"9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/tokio-util/0.7.18/download\"],\n        strip_prefix = \"tokio-util-0.7.18\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.tokio-util-0.7.18.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__twox-hash-2.1.2\",\n        sha256 = \"9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/twox-hash/2.1.2/download\"],\n        strip_prefix = \"twox-hash-2.1.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.twox-hash-2.1.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__typenum-1.20.0\",\n        sha256 = \"40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/typenum/1.20.0/download\"],\n        strip_prefix = \"typenum-1.20.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.typenum-1.20.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__ucd-trie-0.1.7\",\n        sha256 = \"2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ucd-trie/0.1.7/download\"],\n        strip_prefix = \"ucd-trie-0.1.7\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.ucd-trie-0.1.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__unicode-ident-1.0.24\",\n        sha256 = \"e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/unicode-ident/1.0.24/download\"],\n        strip_prefix = \"unicode-ident-1.0.24\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.unicode-ident-1.0.24.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__universal-hash-0.5.1\",\n        sha256 = \"fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/universal-hash/0.5.1/download\"],\n        strip_prefix = \"universal-hash-0.5.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.universal-hash-0.5.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__utf8parse-0.2.2\",\n        sha256 = \"06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/utf8parse/0.2.2/download\"],\n        strip_prefix = \"utf8parse-0.2.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.utf8parse-0.2.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__uuid-1.23.1\",\n        sha256 = \"ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/uuid/1.23.1/download\"],\n        strip_prefix = \"uuid-1.23.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.uuid-1.23.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__vcell-0.1.3\",\n        sha256 = \"77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/vcell/0.1.3/download\"],\n        strip_prefix = \"vcell-0.1.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.vcell-0.1.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__version_check-0.9.5\",\n        sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n        strip_prefix = \"version_check-0.9.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.version_check-0.9.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__void-1.0.2\",\n        sha256 = \"6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/void/1.0.2/download\"],\n        strip_prefix = \"void-1.0.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.void-1.0.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__volatile-register-0.2.2\",\n        sha256 = \"de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/volatile-register/0.2.2/download\"],\n        strip_prefix = \"volatile-register-0.2.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.volatile-register-0.2.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__wasi-0.11.1-wasi-snapshot-preview1\",\n        sha256 = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download\"],\n        strip_prefix = \"wasi-0.11.1+wasi-snapshot-preview1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__windows-link-0.2.1\",\n        sha256 = \"f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/windows-link/0.2.1/download\"],\n        strip_prefix = \"windows-link-0.2.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.windows-link-0.2.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__windows-sys-0.61.2\",\n        sha256 = \"ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/windows-sys/0.61.2/download\"],\n        strip_prefix = \"windows-sys-0.61.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.windows-sys-0.61.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__zerocopy-0.8.48\",\n        sha256 = \"eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zerocopy/0.8.48/download\"],\n        strip_prefix = \"zerocopy-0.8.48\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.zerocopy-0.8.48.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__zerocopy-derive-0.8.48\",\n        sha256 = \"70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.48/download\"],\n        strip_prefix = \"zerocopy-derive-0.8.48\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.zerocopy-derive-0.8.48.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__zeroize-1.8.2\",\n        sha256 = \"b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zeroize/1.8.2/download\"],\n        strip_prefix = \"zeroize-1.8.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.zeroize-1.8.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__zeroize_derive-1.4.3\",\n        sha256 = \"85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zeroize_derive/1.4.3/download\"],\n        strip_prefix = \"zeroize_derive-1.4.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.zeroize_derive-1.4.3.bazel\"),\n    )\n\n    return [\n       struct(repo=\"rust_crates__aes-0.8.4\", is_dev_dep = False),\n       struct(repo=\"rust_crates__aes-gcm-0.10.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__aligned-0.4.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__anyhow-1.0.102\", is_dev_dep = False),\n       struct(repo=\"rust_crates__bitfield-0.14.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__bitfield-struct-0.11.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__bitflags-2.11.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__byteorder-1.5.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__cfg-if-1.0.4\", is_dev_dep = False),\n       struct(repo=\"rust_crates__cipher-0.4.4\", is_dev_dep = False),\n       struct(repo=\"rust_crates__clap-4.6.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__compiler_builtins-0.1.160\", is_dev_dep = False),\n       struct(repo=\"rust_crates__cortex-m-0.7.7\", is_dev_dep = False),\n       struct(repo=\"rust_crates__cortex-m-rt-0.7.5\", is_dev_dep = False),\n       struct(repo=\"rust_crates__cortex-m-semihosting-0.5.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__ctr-0.9.2\", is_dev_dep = False),\n       struct(repo=\"rust_crates__ecdsa-0.16.9\", is_dev_dep = False),\n       struct(repo=\"rust_crates__embedded-hal-1.0.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__embedded-hal-async-1.0.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__embedded-hal-nb-1.0.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__embedded-io-0.6.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__fugit-0.3.9\", is_dev_dep = False),\n       struct(repo=\"rust_crates__futures-0.3.32\", is_dev_dep = False),\n       struct(repo=\"rust_crates__heapless-0.9.2\", is_dev_dep = False),\n       struct(repo=\"rust_crates__hex-0.4.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__hex-literal-0.4.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__hmac-0.12.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__k256-0.13.4\", is_dev_dep = False),\n       struct(repo=\"rust_crates__log-0.4.29\", is_dev_dep = False),\n       struct(repo=\"rust_crates__mctp-0.2.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__mctp-lib-0.1.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__memoffset-0.9.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__minijinja-2.19.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__nb-1.1.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__nom-7.1.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__object-0.37.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__openprot-hal-blocking-0.1.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__p256-0.13.2\", is_dev_dep = False),\n       struct(repo=\"rust_crates__p384-0.13.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__panic-halt-1.0.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__paste-1.0.15\", is_dev_dep = False),\n       struct(repo=\"rust_crates__proc-macro2-1.0.106\", is_dev_dep = False),\n       struct(repo=\"rust_crates__proposed-traits-0.1.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__prost-0.13.5\", is_dev_dep = False),\n       struct(repo=\"rust_crates__quote-1.0.45\", is_dev_dep = False),\n       struct(repo=\"rust_crates__rand_core-0.9.5\", is_dev_dep = False),\n       struct(repo=\"rust_crates__riscv-0.12.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__riscv-rt-0.12.2\", is_dev_dep = False),\n       struct(repo=\"rust_crates__riscv-semihosting-0.1.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__rustc-demangle-0.1.27\", is_dev_dep = False),\n       struct(repo=\"rust_crates__sec1-0.7.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__serde-1.0.228\", is_dev_dep = False),\n       struct(repo=\"rust_crates__serde_derive-1.0.228\", is_dev_dep = False),\n       struct(repo=\"rust_crates__serde_json5-0.2.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__sha2-0.10.9\", is_dev_dep = False),\n       struct(repo=\"rust_crates__sha3-0.10.9\", is_dev_dep = False),\n       struct(repo=\"rust_crates__smlang-0.8.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__subtle-2.6.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__syn-1.0.109\", is_dev_dep = False),\n       struct(repo=\"rust_crates__syn-2.0.117\", is_dev_dep = False),\n       struct(repo=\"rust_crates__thiserror-2.0.18\", is_dev_dep = False),\n       struct(repo=\"rust_crates__tock-registers-0.9.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__tokio-1.52.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__tokio-util-0.7.18\", is_dev_dep = False),\n       struct(repo=\"rust_crates__vcell-0.1.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__zerocopy-0.8.48\", is_dev_dep = False),\n       struct(repo=\"rust_crates__zeroize-1.8.2\", is_dev_dep = False),\n    ]\n"
+                "defs.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'openprot'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"new_git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe/private:local_crate_mirror.bzl\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n    \"\"\"Flatten a list of dependency maps into one dictionary.\n\n    Dependency maps have the following structure:\n\n    ```python\n    DEPENDENCIES_MAP = {\n        # The first key in the map is a Bazel package\n        # name of the workspace this file is defined in.\n        \"workspace_member_package\": {\n\n            # Not all dependencies are supported for all platforms.\n            # the condition key is the condition required to be true\n            # on the host platform.\n            \"condition\": {\n\n                # An alias to a crate target.     # The label of the crate target the\n                # Aliases are only crate names.   # package name refers to.\n                \"package_name\":                   \"@full//:label\",\n            }\n        }\n    }\n    ```\n\n    Args:\n        all_dependency_maps (list): A list of dicts as described above\n\n    Returns:\n        dict: A dictionary as described above\n    \"\"\"\n    dependencies = {}\n\n    for workspace_deps_map in all_dependency_maps:\n        for pkg_name, conditional_deps_map in workspace_deps_map.items():\n            if pkg_name not in dependencies:\n                non_frozen_map = dict()\n                for key, values in conditional_deps_map.items():\n                    non_frozen_map.update({key: dict(values.items())})\n                dependencies.setdefault(pkg_name, non_frozen_map)\n                continue\n\n            for condition, deps_map in conditional_deps_map.items():\n                # If the condition has not been recorded, do so and continue\n                if condition not in dependencies[pkg_name]:\n                    dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n                    continue\n\n                # Alert on any miss-matched dependencies\n                inconsistent_entries = []\n                for crate_name, crate_label in deps_map.items():\n                    existing = dependencies[pkg_name][condition].get(crate_name)\n                    if existing and existing != crate_label:\n                        inconsistent_entries.append((crate_name, existing, crate_label))\n                    dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n    return dependencies\n\ndef crate_deps(deps, package_name = None):\n    \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n    Args:\n        deps (list): The desired list of crate targets.\n        package_name (str, optional): The package name of the set of dependencies to look up.\n            Defaults to `native.package_name()`.\n\n    Returns:\n        list: A list of labels to generated rust targets (str)\n    \"\"\"\n\n    if not deps:\n        return []\n\n    if package_name == None:\n        package_name = native.package_name()\n\n    # Join both sets of dependencies\n    dependencies = _flatten_dependency_maps([\n        _NORMAL_DEPENDENCIES,\n        _NORMAL_DEV_DEPENDENCIES,\n        _PROC_MACRO_DEPENDENCIES,\n        _PROC_MACRO_DEV_DEPENDENCIES,\n        _BUILD_DEPENDENCIES,\n        _BUILD_PROC_MACRO_DEPENDENCIES,\n    ]).pop(package_name, {})\n\n    # Combine all conditional packages so we can easily index over a flat list\n    # TODO: Perhaps this should actually return select statements and maintain\n    # the conditionals of the dependencies\n    flat_deps = {}\n    for deps_set in dependencies.values():\n        for crate_name, crate_label in deps_set.items():\n            flat_deps.update({crate_name: crate_label})\n\n    missing_crates = []\n    crate_targets = []\n    for crate_target in deps:\n        if crate_target not in flat_deps:\n            missing_crates.append(crate_target)\n        else:\n            crate_targets.append(flat_deps[crate_target])\n\n    if missing_crates:\n        fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n            missing_crates,\n            package_name,\n            dependencies,\n        ))\n\n    return crate_targets\n\ndef all_crate_deps(\n        normal = False, \n        normal_dev = False, \n        proc_macro = False, \n        proc_macro_dev = False,\n        build = False,\n        build_proc_macro = False,\n        package_name = None):\n    \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n    for the package where this macro is called.\n\n    If no parameters are set, all normal dependencies are returned. Setting any one flag will\n    otherwise impact the contents of the returned list.\n\n    Args:\n        normal (bool, optional): If True, normal dependencies are included in the\n            output list.\n        normal_dev (bool, optional): If True, normal dev dependencies will be\n            included in the output list..\n        proc_macro (bool, optional): If True, proc_macro dependencies are included\n            in the output list.\n        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n            included in the output list.\n        build (bool, optional): If True, build dependencies are included\n            in the output list.\n        build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n            included in the output list.\n        package_name (str, optional): The package name of the set of dependencies to look up.\n            Defaults to `native.package_name()` when unset.\n\n    Returns:\n        list: A list of labels to generated rust targets (str)\n    \"\"\"\n\n    if package_name == None:\n        package_name = native.package_name()\n\n    # Determine the relevant maps to use\n    all_dependency_maps = []\n    if normal:\n        all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n    if normal_dev:\n        all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n    if proc_macro:\n        all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n    if proc_macro_dev:\n        all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n    if build:\n        all_dependency_maps.append(_BUILD_DEPENDENCIES)\n    if build_proc_macro:\n        all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n    # Default to always using normal dependencies\n    if not all_dependency_maps:\n        all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n    dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n    if not dependencies:\n        if dependencies == None:\n            fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n        else:\n            return []\n\n    crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n    for condition, deps in dependencies.items():\n        crate_deps += selects.with_or({\n            tuple(_CONDITIONS[condition]): deps.values(),\n            \"//conditions:default\": [],\n        })\n\n    return crate_deps\n\ndef aliases(\n        normal = False,\n        normal_dev = False,\n        proc_macro = False,\n        proc_macro_dev = False,\n        build = False,\n        build_proc_macro = False,\n        package_name = None):\n    \"\"\"Produces a map of Crate alias names to their original label\n\n    If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n    Setting any one flag will otherwise determine the contents of the returned dict.\n\n    Args:\n        normal (bool, optional): If True, normal dependencies are included in the\n            output list.\n        normal_dev (bool, optional): If True, normal dev dependencies will be\n            included in the output list..\n        proc_macro (bool, optional): If True, proc_macro dependencies are included\n            in the output list.\n        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n            included in the output list.\n        build (bool, optional): If True, build dependencies are included\n            in the output list.\n        build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n            included in the output list.\n        package_name (str, optional): The package name of the set of dependencies to look up.\n            Defaults to `native.package_name()` when unset.\n\n    Returns:\n        dict: The aliases of all associated packages\n    \"\"\"\n    if package_name == None:\n        package_name = native.package_name()\n\n    # Determine the relevant maps to use\n    all_aliases_maps = []\n    if normal:\n        all_aliases_maps.append(_NORMAL_ALIASES)\n    if normal_dev:\n        all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n    if proc_macro:\n        all_aliases_maps.append(_PROC_MACRO_ALIASES)\n    if proc_macro_dev:\n        all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n    if build:\n        all_aliases_maps.append(_BUILD_ALIASES)\n    if build_proc_macro:\n        all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n    # Default to always using normal aliases\n    if not all_aliases_maps:\n        all_aliases_maps.append(_NORMAL_ALIASES)\n        all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n    aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n    if not aliases:\n        return dict()\n\n    common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n    # If there are only common items in the dictionary, immediately return them\n    if not len(aliases.keys()) == 1:\n        return dict(common_items)\n\n    # Build a single select statement where each conditional has accounted for the\n    # common set of aliases.\n    crate_aliases = {\"//conditions:default\": dict(common_items)}\n    for condition, deps in aliases.items():\n        condition_triples = _CONDITIONS[condition]\n        for triple in condition_triples:\n            if triple in crate_aliases:\n                crate_aliases[triple].update(deps)\n            else:\n                crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n    return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n    \"third_party/crates_io\": {\n        _COMMON_CONDITION: {\n            \"aes\": Label(\"@rust_crates//:aes-0.8.4\"),\n            \"aes-gcm\": Label(\"@rust_crates//:aes-gcm-0.10.3\"),\n            \"aligned\": Label(\"@rust_crates//:aligned-0.4.3\"),\n            \"anyhow\": Label(\"@rust_crates//:anyhow-1.0.102\"),\n            \"bitfield\": Label(\"@rust_crates//:bitfield-0.14.0\"),\n            \"bitflags\": Label(\"@rust_crates//:bitflags-2.11.1\"),\n            \"byteorder\": Label(\"@rust_crates//:byteorder-1.5.0\"),\n            \"cfg-if\": Label(\"@rust_crates//:cfg-if-1.0.4\"),\n            \"cipher\": Label(\"@rust_crates//:cipher-0.4.4\"),\n            \"clap\": Label(\"@rust_crates//:clap-4.6.1\"),\n            \"compiler_builtins\": Label(\"@rust_crates//:compiler_builtins-0.1.160\"),\n            \"cortex-m\": Label(\"@rust_crates//:cortex-m-0.7.7\"),\n            \"cortex-m-rt\": Label(\"@rust_crates//:cortex-m-rt-0.7.5\"),\n            \"cortex-m-semihosting\": Label(\"@rust_crates//:cortex-m-semihosting-0.5.0\"),\n            \"ctr\": Label(\"@rust_crates//:ctr-0.9.2\"),\n            \"ecdsa\": Label(\"@rust_crates//:ecdsa-0.16.9\"),\n            \"embedded-hal\": Label(\"@rust_crates//:embedded-hal-1.0.0\"),\n            \"embedded-hal-async\": Label(\"@rust_crates//:embedded-hal-async-1.0.0\"),\n            \"embedded-hal-nb\": Label(\"@rust_crates//:embedded-hal-nb-1.0.0\"),\n            \"embedded-io\": Label(\"@rust_crates//:embedded-io-0.6.1\"),\n            \"fugit\": Label(\"@rust_crates//:fugit-0.3.9\"),\n            \"futures\": Label(\"@rust_crates//:futures-0.3.32\"),\n            \"heapless\": Label(\"@rust_crates//:heapless-0.9.2\"),\n            \"hex\": Label(\"@rust_crates//:hex-0.4.3\"),\n            \"hex-literal\": Label(\"@rust_crates//:hex-literal-0.4.1\"),\n            \"hmac\": Label(\"@rust_crates//:hmac-0.12.1\"),\n            \"k256\": Label(\"@rust_crates//:k256-0.13.4\"),\n            \"log\": Label(\"@rust_crates//:log-0.4.29\"),\n            \"mctp\": Label(\"@rust_crates//:mctp-0.2.0\"),\n            \"mctp-lib\": Label(\"@rust_crates//:mctp-lib-0.1.0\"),\n            \"memoffset\": Label(\"@rust_crates//:memoffset-0.9.1\"),\n            \"minijinja\": Label(\"@rust_crates//:minijinja-2.19.0\"),\n            \"nb\": Label(\"@rust_crates//:nb-1.1.0\"),\n            \"nom\": Label(\"@rust_crates//:nom-7.1.3\"),\n            \"object\": Label(\"@rust_crates//:object-0.37.3\"),\n            \"openprot-hal-blocking\": Label(\"@rust_crates//:openprot-hal-blocking-0.1.0\"),\n            \"p256\": Label(\"@rust_crates//:p256-0.13.2\"),\n            \"p384\": Label(\"@rust_crates//:p384-0.13.1\"),\n            \"panic-halt\": Label(\"@rust_crates//:panic-halt-1.0.0\"),\n            \"proc-macro2\": Label(\"@rust_crates//:proc-macro2-1.0.106\"),\n            \"prost\": Label(\"@rust_crates//:prost-0.13.5\"),\n            \"quote\": Label(\"@rust_crates//:quote-1.0.45\"),\n            \"rand_core\": Label(\"@rust_crates//:rand_core-0.9.5\"),\n            \"riscv\": Label(\"@rust_crates//:riscv-0.12.1\"),\n            \"riscv-rt\": Label(\"@rust_crates//:riscv-rt-0.12.2\"),\n            \"riscv-semihosting\": Label(\"@rust_crates//:riscv-semihosting-0.1.3\"),\n            \"rustc-demangle\": Label(\"@rust_crates//:rustc-demangle-0.1.27\"),\n            \"sec1\": Label(\"@rust_crates//:sec1-0.7.3\"),\n            \"serde\": Label(\"@rust_crates//:serde-1.0.228\"),\n            \"serde_json5\": Label(\"@rust_crates//:serde_json5-0.2.1\"),\n            \"sha2\": Label(\"@rust_crates//:sha2-0.10.9\"),\n            \"sha3\": Label(\"@rust_crates//:sha3-0.10.9\"),\n            \"smlang\": Label(\"@rust_crates//:smlang-0.8.0\"),\n            \"subtle\": Label(\"@rust_crates//:subtle-2.6.1\"),\n            \"syn1\": Label(\"@rust_crates//:syn-1.0.109\"),\n            \"syn\": Label(\"@rust_crates//:syn-2.0.117\"),\n            \"thiserror\": Label(\"@rust_crates//:thiserror-2.0.18\"),\n            \"tock-registers\": Label(\"@rust_crates//:tock-registers-0.9.0\"),\n            \"tokio\": Label(\"@rust_crates//:tokio-1.52.1\"),\n            \"tokio-util\": Label(\"@rust_crates//:tokio-util-0.7.18\"),\n            \"vcell\": Label(\"@rust_crates//:vcell-0.1.3\"),\n            \"zerocopy\": Label(\"@rust_crates//:zerocopy-0.8.48\"),\n            \"zeroize\": Label(\"@rust_crates//:zeroize-1.8.2\"),\n        },\n    },\n}\n\n\n_NORMAL_ALIASES = {\n    \"third_party/crates_io\": {\n        _COMMON_CONDITION: {\n            Label(\"@rust_crates//:syn-1.0.109\"): \"syn1\",\n        },\n    },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n    \"third_party/crates_io\": {\n        _COMMON_CONDITION: {\n            \"bitfield-struct\": Label(\"@rust_crates//:bitfield-struct-0.11.0\"),\n            \"paste\": Label(\"@rust_crates//:paste-1.0.15\"),\n            \"serde_derive\": Label(\"@rust_crates//:serde_derive-1.0.228\"),\n        },\n    },\n}\n\n\n_PROC_MACRO_ALIASES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_BUILD_DEPENDENCIES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_BUILD_ALIASES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n    \"third_party/crates_io\": {\n    },\n}\n\n\n_CONDITIONS = {\n    \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n    \"aarch64-linux-android\": [],\n    \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n    \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [],\n    \"cfg(all(not(rustix_use_libc), not(miri), target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\",\"@rules_rust//rust/platform:thumbv7em-none-eabi\",\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n    \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n    \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n    \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n    \"cfg(any())\": [],\n    \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(any(target_arch = \\\"arm\\\", target_pointer_width = \\\"32\\\", target_pointer_width = \\\"64\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\",\"@rules_rust//rust/platform:thumbv7em-none-eabi\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(any(unix, target_os = \\\"hermit\\\", target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(any(unix, target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(target_arch = \\\"aarch64\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n    \"cfg(target_os = \\\"hermit\\\")\": [],\n    \"cfg(target_os = \\\"redox\\\")\": [],\n    \"cfg(target_os = \\\"wasi\\\")\": [],\n    \"cfg(unix)\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(windows)\": [],\n    \"riscv32imc-unknown-none-elf\": [\"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\"],\n    \"thumbv7em-none-eabi\": [\"@rules_rust//rust/platform:thumbv7em-none-eabi\"],\n    \"x86_64-apple-darwin\": [\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n    \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n    \"\"\"A macro for defining repositories for all generated crates.\n\n    Returns:\n      A list of repos visible to the module through the module extension.\n    \"\"\"\n    maybe(\n        http_archive,\n        name = \"rust_crates__adler2-2.0.1\",\n        sha256 = \"320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/adler2/2.0.1/download\"],\n        strip_prefix = \"adler2-2.0.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.adler2-2.0.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__aead-0.5.2\",\n        sha256 = \"d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aead/0.5.2/download\"],\n        strip_prefix = \"aead-0.5.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.aead-0.5.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__aes-0.8.4\",\n        sha256 = \"b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aes/0.8.4/download\"],\n        strip_prefix = \"aes-0.8.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.aes-0.8.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__aes-gcm-0.10.3\",\n        sha256 = \"831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aes-gcm/0.10.3/download\"],\n        strip_prefix = \"aes-gcm-0.10.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.aes-gcm-0.10.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__aligned-0.4.3\",\n        sha256 = \"ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aligned/0.4.3/download\"],\n        strip_prefix = \"aligned-0.4.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.aligned-0.4.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__anstream-1.0.0\",\n        sha256 = \"824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/anstream/1.0.0/download\"],\n        strip_prefix = \"anstream-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.anstream-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__anstyle-1.0.14\",\n        sha256 = \"940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/anstyle/1.0.14/download\"],\n        strip_prefix = \"anstyle-1.0.14\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.anstyle-1.0.14.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__anstyle-parse-1.0.0\",\n        sha256 = \"52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/anstyle-parse/1.0.0/download\"],\n        strip_prefix = \"anstyle-parse-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.anstyle-parse-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__anstyle-query-1.1.5\",\n        sha256 = \"40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/anstyle-query/1.1.5/download\"],\n        strip_prefix = \"anstyle-query-1.1.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.anstyle-query-1.1.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__anstyle-wincon-3.0.11\",\n        sha256 = \"291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.11/download\"],\n        strip_prefix = \"anstyle-wincon-3.0.11\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.anstyle-wincon-3.0.11.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__anyhow-1.0.102\",\n        sha256 = \"7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/anyhow/1.0.102/download\"],\n        strip_prefix = \"anyhow-1.0.102\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.anyhow-1.0.102.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__as-slice-0.2.1\",\n        sha256 = \"516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/as-slice/0.2.1/download\"],\n        strip_prefix = \"as-slice-0.2.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.as-slice-0.2.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__autocfg-1.5.0\",\n        sha256 = \"c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/autocfg/1.5.0/download\"],\n        strip_prefix = \"autocfg-1.5.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.autocfg-1.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__bare-metal-0.2.5\",\n        sha256 = \"5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bare-metal/0.2.5/download\"],\n        strip_prefix = \"bare-metal-0.2.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.bare-metal-0.2.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__base16ct-0.2.0\",\n        sha256 = \"4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/base16ct/0.2.0/download\"],\n        strip_prefix = \"base16ct-0.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.base16ct-0.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__bitfield-0.13.2\",\n        sha256 = \"46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitfield/0.13.2/download\"],\n        strip_prefix = \"bitfield-0.13.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.bitfield-0.13.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__bitfield-0.14.0\",\n        sha256 = \"2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitfield/0.14.0/download\"],\n        strip_prefix = \"bitfield-0.14.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.bitfield-0.14.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__bitfield-struct-0.11.0\",\n        sha256 = \"d3ca019570363e800b05ad4fd890734f28ac7b72f563ad8a35079efb793616f8\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitfield-struct/0.11.0/download\"],\n        strip_prefix = \"bitfield-struct-0.11.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.bitfield-struct-0.11.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__bitflags-2.11.1\",\n        sha256 = \"c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitflags/2.11.1/download\"],\n        strip_prefix = \"bitflags-2.11.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.bitflags-2.11.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__block-buffer-0.10.4\",\n        sha256 = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/block-buffer/0.10.4/download\"],\n        strip_prefix = \"block-buffer-0.10.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.block-buffer-0.10.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__byteorder-1.5.0\",\n        sha256 = \"1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/byteorder/1.5.0/download\"],\n        strip_prefix = \"byteorder-1.5.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.byteorder-1.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__bytes-1.11.1\",\n        sha256 = \"1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bytes/1.11.1/download\"],\n        strip_prefix = \"bytes-1.11.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.bytes-1.11.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cfg-if-1.0.4\",\n        sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n        strip_prefix = \"cfg-if-1.0.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cfg-if-1.0.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cipher-0.4.4\",\n        sha256 = \"773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cipher/0.4.4/download\"],\n        strip_prefix = \"cipher-0.4.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cipher-0.4.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__clap-4.6.1\",\n        sha256 = \"1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/clap/4.6.1/download\"],\n        strip_prefix = \"clap-4.6.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.clap-4.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__clap_builder-4.6.0\",\n        sha256 = \"714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/clap_builder/4.6.0/download\"],\n        strip_prefix = \"clap_builder-4.6.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.clap_builder-4.6.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__clap_derive-4.6.1\",\n        sha256 = \"f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/clap_derive/4.6.1/download\"],\n        strip_prefix = \"clap_derive-4.6.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.clap_derive-4.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__clap_lex-1.1.0\",\n        sha256 = \"c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/clap_lex/1.1.0/download\"],\n        strip_prefix = \"clap_lex-1.1.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.clap_lex-1.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__colorchoice-1.0.5\",\n        sha256 = \"1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/colorchoice/1.0.5/download\"],\n        strip_prefix = \"colorchoice-1.0.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.colorchoice-1.0.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__compiler_builtins-0.1.160\",\n        sha256 = \"6376049cfa92c0aa8b9ac95fae22184b981c658208d4ed8a1dc553cd83612895\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/compiler_builtins/0.1.160/download\"],\n        strip_prefix = \"compiler_builtins-0.1.160\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.compiler_builtins-0.1.160.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__const-oid-0.9.6\",\n        sha256 = \"c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/const-oid/0.9.6/download\"],\n        strip_prefix = \"const-oid-0.9.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.const-oid-0.9.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cortex-m-0.7.7\",\n        sha256 = \"8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m/0.7.7/download\"],\n        strip_prefix = \"cortex-m-0.7.7\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cortex-m-0.7.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cortex-m-rt-0.7.5\",\n        sha256 = \"801d4dec46b34c299ccf6b036717ae0fce602faa4f4fe816d9013b9a7c9f5ba6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m-rt/0.7.5/download\"],\n        strip_prefix = \"cortex-m-rt-0.7.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cortex-m-rt-0.7.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cortex-m-rt-macros-0.7.5\",\n        sha256 = \"e37549a379a9e0e6e576fd208ee60394ccb8be963889eebba3ffe0980364f472\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m-rt-macros/0.7.5/download\"],\n        strip_prefix = \"cortex-m-rt-macros-0.7.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cortex-m-rt-macros-0.7.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cortex-m-semihosting-0.5.0\",\n        sha256 = \"c23234600452033cc77e4b761e740e02d2c4168e11dbf36ab14a0f58973592b0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m-semihosting/0.5.0/download\"],\n        strip_prefix = \"cortex-m-semihosting-0.5.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cortex-m-semihosting-0.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__cpufeatures-0.2.17\",\n        sha256 = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cpufeatures/0.2.17/download\"],\n        strip_prefix = \"cpufeatures-0.2.17\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.cpufeatures-0.2.17.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__crc-3.4.0\",\n        sha256 = \"5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crc/3.4.0/download\"],\n        strip_prefix = \"crc-3.4.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.crc-3.4.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__crc-catalog-2.5.0\",\n        sha256 = \"217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crc-catalog/2.5.0/download\"],\n        strip_prefix = \"crc-catalog-2.5.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.crc-catalog-2.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__crc32fast-1.5.0\",\n        sha256 = \"9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crc32fast/1.5.0/download\"],\n        strip_prefix = \"crc32fast-1.5.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.crc32fast-1.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__critical-section-1.2.0\",\n        sha256 = \"790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/critical-section/1.2.0/download\"],\n        strip_prefix = \"critical-section-1.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.critical-section-1.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__crypto-bigint-0.5.5\",\n        sha256 = \"0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crypto-bigint/0.5.5/download\"],\n        strip_prefix = \"crypto-bigint-0.5.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.crypto-bigint-0.5.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__crypto-common-0.1.7\",\n        sha256 = \"78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crypto-common/0.1.7/download\"],\n        strip_prefix = \"crypto-common-0.1.7\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.crypto-common-0.1.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__ctr-0.9.2\",\n        sha256 = \"0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ctr/0.9.2/download\"],\n        strip_prefix = \"ctr-0.9.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.ctr-0.9.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__der-0.7.10\",\n        sha256 = \"e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/der/0.7.10/download\"],\n        strip_prefix = \"der-0.7.10\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.der-0.7.10.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__digest-0.10.7\",\n        sha256 = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/digest/0.10.7/download\"],\n        strip_prefix = \"digest-0.10.7\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.digest-0.10.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__ecdsa-0.16.9\",\n        sha256 = \"ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ecdsa/0.16.9/download\"],\n        strip_prefix = \"ecdsa-0.16.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.ecdsa-0.16.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__either-1.15.0\",\n        sha256 = \"48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/either/1.15.0/download\"],\n        strip_prefix = \"either-1.15.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.either-1.15.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__elliptic-curve-0.13.8\",\n        sha256 = \"b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/elliptic-curve/0.13.8/download\"],\n        strip_prefix = \"elliptic-curve-0.13.8\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.elliptic-curve-0.13.8.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-crc-macros-1.0.0\",\n        sha256 = \"4f1c75747a43b086df1a87fb2a889590bc0725e0abf54bba6d0c4bf7bd9e762c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-crc-macros/1.0.0/download\"],\n        strip_prefix = \"embedded-crc-macros-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-crc-macros-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-hal-0.2.7\",\n        sha256 = \"35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-hal/0.2.7/download\"],\n        strip_prefix = \"embedded-hal-0.2.7\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-hal-0.2.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-hal-1.0.0\",\n        sha256 = \"361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-hal/1.0.0/download\"],\n        strip_prefix = \"embedded-hal-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-hal-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-hal-async-1.0.0\",\n        sha256 = \"0c4c685bbef7fe13c3c6dd4da26841ed3980ef33e841cddfa15ce8a8fb3f1884\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-hal-async/1.0.0/download\"],\n        strip_prefix = \"embedded-hal-async-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-hal-async-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-hal-nb-1.0.0\",\n        sha256 = \"fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-hal-nb/1.0.0/download\"],\n        strip_prefix = \"embedded-hal-nb-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-hal-nb-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-io-0.6.1\",\n        sha256 = \"edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-io/0.6.1/download\"],\n        strip_prefix = \"embedded-io-0.6.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-io-0.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__embedded-io-async-0.6.1\",\n        sha256 = \"3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-io-async/0.6.1/download\"],\n        strip_prefix = \"embedded-io-async-0.6.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.embedded-io-async-0.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__equivalent-1.0.2\",\n        sha256 = \"877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/equivalent/1.0.2/download\"],\n        strip_prefix = \"equivalent-1.0.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.equivalent-1.0.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__errno-0.3.14\",\n        sha256 = \"39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/errno/0.3.14/download\"],\n        strip_prefix = \"errno-0.3.14\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.errno-0.3.14.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__ff-0.13.1\",\n        sha256 = \"c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ff/0.13.1/download\"],\n        strip_prefix = \"ff-0.13.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.ff-0.13.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__flate2-1.1.9\",\n        sha256 = \"843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/flate2/1.1.9/download\"],\n        strip_prefix = \"flate2-1.1.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.flate2-1.1.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__foldhash-0.1.5\",\n        sha256 = \"d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/foldhash/0.1.5/download\"],\n        strip_prefix = \"foldhash-0.1.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.foldhash-0.1.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__fugit-0.3.9\",\n        sha256 = \"4e639847d312d9a82d2e75b0edcc1e934efcc64e6cb7aa94f0b1fbec0bc231d6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/fugit/0.3.9/download\"],\n        strip_prefix = \"fugit-0.3.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.fugit-0.3.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-0.3.32\",\n        sha256 = \"8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures/0.3.32/download\"],\n        strip_prefix = \"futures-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-channel-0.3.32\",\n        sha256 = \"07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-channel/0.3.32/download\"],\n        strip_prefix = \"futures-channel-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-channel-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-core-0.3.32\",\n        sha256 = \"7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-core/0.3.32/download\"],\n        strip_prefix = \"futures-core-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-core-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-executor-0.3.32\",\n        sha256 = \"baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-executor/0.3.32/download\"],\n        strip_prefix = \"futures-executor-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-executor-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-io-0.3.32\",\n        sha256 = \"cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-io/0.3.32/download\"],\n        strip_prefix = \"futures-io-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-io-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-macro-0.3.32\",\n        sha256 = \"e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-macro/0.3.32/download\"],\n        strip_prefix = \"futures-macro-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-macro-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-sink-0.3.32\",\n        sha256 = \"c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-sink/0.3.32/download\"],\n        strip_prefix = \"futures-sink-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-sink-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-task-0.3.32\",\n        sha256 = \"037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-task/0.3.32/download\"],\n        strip_prefix = \"futures-task-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-task-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__futures-util-0.3.32\",\n        sha256 = \"389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/futures-util/0.3.32/download\"],\n        strip_prefix = \"futures-util-0.3.32\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.futures-util-0.3.32.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__gcd-2.3.0\",\n        sha256 = \"1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/gcd/2.3.0/download\"],\n        strip_prefix = \"gcd-2.3.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.gcd-2.3.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__generic-array-0.14.7\",\n        sha256 = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/generic-array/0.14.7/download\"],\n        strip_prefix = \"generic-array-0.14.7\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.generic-array-0.14.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__ghash-0.5.1\",\n        sha256 = \"f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ghash/0.5.1/download\"],\n        strip_prefix = \"ghash-0.5.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.ghash-0.5.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__group-0.13.0\",\n        sha256 = \"f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/group/0.13.0/download\"],\n        strip_prefix = \"group-0.13.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.group-0.13.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__hash32-0.3.1\",\n        sha256 = \"47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hash32/0.3.1/download\"],\n        strip_prefix = \"hash32-0.3.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.hash32-0.3.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__hashbrown-0.15.5\",\n        sha256 = \"9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hashbrown/0.15.5/download\"],\n        strip_prefix = \"hashbrown-0.15.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.hashbrown-0.15.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__hashbrown-0.17.0\",\n        sha256 = \"4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hashbrown/0.17.0/download\"],\n        strip_prefix = \"hashbrown-0.17.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.hashbrown-0.17.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__heapless-0.8.0\",\n        sha256 = \"0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/heapless/0.8.0/download\"],\n        strip_prefix = \"heapless-0.8.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.heapless-0.8.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__heapless-0.9.2\",\n        sha256 = \"2af2455f757db2b292a9b1768c4b70186d443bcb3b316252d6b540aec1cd89ed\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/heapless/0.9.2/download\"],\n        strip_prefix = \"heapless-0.9.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.heapless-0.9.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__heck-0.5.0\",\n        sha256 = \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/heck/0.5.0/download\"],\n        strip_prefix = \"heck-0.5.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.heck-0.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__hex-0.4.3\",\n        sha256 = \"7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hex/0.4.3/download\"],\n        strip_prefix = \"hex-0.4.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.hex-0.4.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__hex-literal-0.4.1\",\n        sha256 = \"6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hex-literal/0.4.1/download\"],\n        strip_prefix = \"hex-literal-0.4.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.hex-literal-0.4.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__hmac-0.12.1\",\n        sha256 = \"6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hmac/0.12.1/download\"],\n        strip_prefix = \"hmac-0.12.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.hmac-0.12.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__indexmap-2.14.0\",\n        sha256 = \"d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/indexmap/2.14.0/download\"],\n        strip_prefix = \"indexmap-2.14.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.indexmap-2.14.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__inout-0.1.4\",\n        sha256 = \"879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/inout/0.1.4/download\"],\n        strip_prefix = \"inout-0.1.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.inout-0.1.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__is_terminal_polyfill-1.70.2\",\n        sha256 = \"a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.2/download\"],\n        strip_prefix = \"is_terminal_polyfill-1.70.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.is_terminal_polyfill-1.70.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__itertools-0.14.0\",\n        sha256 = \"2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/itertools/0.14.0/download\"],\n        strip_prefix = \"itertools-0.14.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.itertools-0.14.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__k256-0.13.4\",\n        sha256 = \"f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/k256/0.13.4/download\"],\n        strip_prefix = \"k256-0.13.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.k256-0.13.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__keccak-0.1.6\",\n        sha256 = \"cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/keccak/0.1.6/download\"],\n        strip_prefix = \"keccak-0.1.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.keccak-0.1.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__libc-0.2.186\",\n        sha256 = \"68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/libc/0.2.186/download\"],\n        strip_prefix = \"libc-0.2.186\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.libc-0.2.186.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__linux-raw-sys-0.12.1\",\n        sha256 = \"32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/linux-raw-sys/0.12.1/download\"],\n        strip_prefix = \"linux-raw-sys-0.12.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.linux-raw-sys-0.12.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__lock_api-0.4.14\",\n        sha256 = \"224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/lock_api/0.4.14/download\"],\n        strip_prefix = \"lock_api-0.4.14\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.lock_api-0.4.14.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__log-0.4.29\",\n        sha256 = \"5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/log/0.4.29/download\"],\n        strip_prefix = \"log-0.4.29\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.log-0.4.29.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"rust_crates__mctp-0.2.0\",\n        commit = \"114dee1a7cfbae601ce11901b20516ebe217a4b2\",\n        init_submodules = True,\n        remote = \"https://github.com/CodeConstruct/mctp-rs.git\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.mctp-0.2.0.bazel\"),\n        strip_prefix = \"mctp\",\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"rust_crates__mctp-estack-0.1.0\",\n        commit = \"114dee1a7cfbae601ce11901b20516ebe217a4b2\",\n        init_submodules = True,\n        remote = \"https://github.com/CodeConstruct/mctp-rs.git\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.mctp-estack-0.1.0.bazel\"),\n        strip_prefix = \"mctp-estack\",\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"rust_crates__mctp-lib-0.1.0\",\n        commit = \"742fa0e991aa2b87509ff12739e011a674643d91\",\n        init_submodules = True,\n        remote = \"https://github.com/OpenPRoT/mctp-lib.git\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.mctp-lib-0.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__memchr-2.8.0\",\n        sha256 = \"f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/memchr/2.8.0/download\"],\n        strip_prefix = \"memchr-2.8.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.memchr-2.8.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__memo-map-0.3.3\",\n        sha256 = \"38d1115007560874e373613744c6fba374c17688327a71c1476d1a5954cc857b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/memo-map/0.3.3/download\"],\n        strip_prefix = \"memo-map-0.3.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.memo-map-0.3.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__memoffset-0.9.1\",\n        sha256 = \"488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/memoffset/0.9.1/download\"],\n        strip_prefix = \"memoffset-0.9.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.memoffset-0.9.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__minijinja-2.19.0\",\n        sha256 = \"805bfd7352166bae857ee569628b52bcd85a1cecf7810861ebceb1686b72b75d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/minijinja/2.19.0/download\"],\n        strip_prefix = \"minijinja-2.19.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.minijinja-2.19.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__minimal-lexical-0.2.1\",\n        sha256 = \"68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/minimal-lexical/0.2.1/download\"],\n        strip_prefix = \"minimal-lexical-0.2.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.minimal-lexical-0.2.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__miniz_oxide-0.8.9\",\n        sha256 = \"1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/miniz_oxide/0.8.9/download\"],\n        strip_prefix = \"miniz_oxide-0.8.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.miniz_oxide-0.8.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__mio-1.2.0\",\n        sha256 = \"50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/mio/1.2.0/download\"],\n        strip_prefix = \"mio-1.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.mio-1.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__nb-0.1.3\",\n        sha256 = \"801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/nb/0.1.3/download\"],\n        strip_prefix = \"nb-0.1.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.nb-0.1.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__nb-1.1.0\",\n        sha256 = \"8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/nb/1.1.0/download\"],\n        strip_prefix = \"nb-1.1.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.nb-1.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__nom-7.1.3\",\n        sha256 = \"d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/nom/7.1.3/download\"],\n        strip_prefix = \"nom-7.1.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.nom-7.1.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__object-0.37.3\",\n        sha256 = \"ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/object/0.37.3/download\"],\n        strip_prefix = \"object-0.37.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.object-0.37.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__once_cell_polyfill-1.70.2\",\n        sha256 = \"384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.2/download\"],\n        strip_prefix = \"once_cell_polyfill-1.70.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.once_cell_polyfill-1.70.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__opaque-debug-0.3.1\",\n        sha256 = \"c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/opaque-debug/0.3.1/download\"],\n        strip_prefix = \"opaque-debug-0.3.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.opaque-debug-0.3.1.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"rust_crates__openprot-hal-blocking-0.1.0\",\n        commit = \"c6cd23a56f3cc7945b062ea1bcdabf3af0dba82d\",\n        init_submodules = True,\n        remote = \"https://github.com/rusty1968/openprot.git\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.openprot-hal-blocking-0.1.0.bazel\"),\n        strip_prefix = \"hal/blocking\",\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__p256-0.13.2\",\n        sha256 = \"c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/p256/0.13.2/download\"],\n        strip_prefix = \"p256-0.13.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.p256-0.13.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__p384-0.13.1\",\n        sha256 = \"fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/p384/0.13.1/download\"],\n        strip_prefix = \"p384-0.13.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.p384-0.13.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__panic-halt-1.0.0\",\n        sha256 = \"a513e167849a384b7f9b746e517604398518590a9142f4846a32e3c2a4de7b11\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/panic-halt/1.0.0/download\"],\n        strip_prefix = \"panic-halt-1.0.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.panic-halt-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__parking_lot-0.12.5\",\n        sha256 = \"93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/parking_lot/0.12.5/download\"],\n        strip_prefix = \"parking_lot-0.12.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.parking_lot-0.12.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__parking_lot_core-0.9.12\",\n        sha256 = \"2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/parking_lot_core/0.9.12/download\"],\n        strip_prefix = \"parking_lot_core-0.9.12\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.parking_lot_core-0.9.12.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__paste-1.0.15\",\n        sha256 = \"57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/paste/1.0.15/download\"],\n        strip_prefix = \"paste-1.0.15\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.paste-1.0.15.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__pest-2.8.6\",\n        sha256 = \"e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/pest/2.8.6/download\"],\n        strip_prefix = \"pest-2.8.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.pest-2.8.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__pest_derive-2.8.6\",\n        sha256 = \"11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/pest_derive/2.8.6/download\"],\n        strip_prefix = \"pest_derive-2.8.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.pest_derive-2.8.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__pest_generator-2.8.6\",\n        sha256 = \"8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/pest_generator/2.8.6/download\"],\n        strip_prefix = \"pest_generator-2.8.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.pest_generator-2.8.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__pest_meta-2.8.6\",\n        sha256 = \"89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/pest_meta/2.8.6/download\"],\n        strip_prefix = \"pest_meta-2.8.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.pest_meta-2.8.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__pin-project-lite-0.2.17\",\n        sha256 = \"a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.17/download\"],\n        strip_prefix = \"pin-project-lite-0.2.17\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.pin-project-lite-0.2.17.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__polyval-0.6.2\",\n        sha256 = \"9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/polyval/0.6.2/download\"],\n        strip_prefix = \"polyval-0.6.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.polyval-0.6.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__primeorder-0.13.6\",\n        sha256 = \"353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/primeorder/0.13.6/download\"],\n        strip_prefix = \"primeorder-0.13.6\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.primeorder-0.13.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__proc-macro2-1.0.106\",\n        sha256 = \"8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/proc-macro2/1.0.106/download\"],\n        strip_prefix = \"proc-macro2-1.0.106\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.proc-macro2-1.0.106.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__prost-0.13.5\",\n        sha256 = \"2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/prost/0.13.5/download\"],\n        strip_prefix = \"prost-0.13.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.prost-0.13.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__prost-derive-0.13.5\",\n        sha256 = \"8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/prost-derive/0.13.5/download\"],\n        strip_prefix = \"prost-derive-0.13.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.prost-derive-0.13.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__quote-1.0.45\",\n        sha256 = \"41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/quote/1.0.45/download\"],\n        strip_prefix = \"quote-1.0.45\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.quote-1.0.45.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__rand_core-0.6.4\",\n        sha256 = \"ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rand_core/0.6.4/download\"],\n        strip_prefix = \"rand_core-0.6.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.rand_core-0.6.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__rand_core-0.9.5\",\n        sha256 = \"76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rand_core/0.9.5/download\"],\n        strip_prefix = \"rand_core-0.9.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.rand_core-0.9.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__redox_syscall-0.5.18\",\n        sha256 = \"ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/redox_syscall/0.5.18/download\"],\n        strip_prefix = \"redox_syscall-0.5.18\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.redox_syscall-0.5.18.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__rfc6979-0.4.0\",\n        sha256 = \"f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rfc6979/0.4.0/download\"],\n        strip_prefix = \"rfc6979-0.4.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.rfc6979-0.4.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-0.11.1\",\n        sha256 = \"2f5c1b8bf41ea746266cdee443d1d1e9125c86ce1447e1a2615abd34330d33a9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv/0.11.1/download\"],\n        strip_prefix = \"riscv-0.11.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-0.11.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-0.12.1\",\n        sha256 = \"5ea8ff73d3720bdd0a97925f0bf79ad2744b6da8ff36be3840c48ac81191d7a7\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv/0.12.1/download\"],\n        strip_prefix = \"riscv-0.12.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-0.12.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-0.13.0\",\n        sha256 = \"afa3cdbeccae4359f6839a00e8b77e5736caa200ba216caf38d24e4c16e2b586\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv/0.13.0/download\"],\n        strip_prefix = \"riscv-0.13.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-0.13.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-macros-0.1.0\",\n        sha256 = \"f265be5d634272320a7de94cea15c22a3bfdd4eb42eb43edc528415f066a1f25\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv-macros/0.1.0/download\"],\n        strip_prefix = \"riscv-macros-0.1.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-macros-0.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-macros-0.2.0\",\n        sha256 = \"e8c4aa1ea1af6dcc83a61be12e8189f9b293c3ba5a487778a4cd89fb060fdbbc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv-macros/0.2.0/download\"],\n        strip_prefix = \"riscv-macros-0.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-macros-0.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-pac-0.2.0\",\n        sha256 = \"8188909339ccc0c68cfb5a04648313f09621e8b87dc03095454f1a11f6c5d436\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv-pac/0.2.0/download\"],\n        strip_prefix = \"riscv-pac-0.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-pac-0.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-rt-0.12.2\",\n        sha256 = \"c0d35e32cf1383183e8885d8a9aa4402a087fd094dc34c2cb6df6687d0229dfe\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv-rt/0.12.2/download\"],\n        strip_prefix = \"riscv-rt-0.12.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-rt-0.12.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-rt-macros-0.2.2\",\n        sha256 = \"30f19a85fe107b65031e0ba8ec60c34c2494069fe910d6c297f5e7cb5a6f76d0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv-rt-macros/0.2.2/download\"],\n        strip_prefix = \"riscv-rt-macros-0.2.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-rt-macros-0.2.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__riscv-semihosting-0.1.3\",\n        sha256 = \"1086dd4bcc13de1cb14b93849411e3466de7e5907d2d8eb269032536e93facc6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/riscv-semihosting/0.1.3/download\"],\n        strip_prefix = \"riscv-semihosting-0.1.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.riscv-semihosting-0.1.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__rustc-demangle-0.1.27\",\n        sha256 = \"b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rustc-demangle/0.1.27/download\"],\n        strip_prefix = \"rustc-demangle-0.1.27\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.rustc-demangle-0.1.27.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__rustc_version-0.2.3\",\n        sha256 = \"138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rustc_version/0.2.3/download\"],\n        strip_prefix = \"rustc_version-0.2.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.rustc_version-0.2.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__rustix-1.1.4\",\n        sha256 = \"b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rustix/1.1.4/download\"],\n        strip_prefix = \"rustix-1.1.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.rustix-1.1.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__ruzstd-0.8.2\",\n        sha256 = \"e5ff0cc5e135c8870a775d3320910cd9b564ec036b4dc0b8741629020be63f01\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ruzstd/0.8.2/download\"],\n        strip_prefix = \"ruzstd-0.8.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.ruzstd-0.8.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__scopeguard-1.2.0\",\n        sha256 = \"94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/scopeguard/1.2.0/download\"],\n        strip_prefix = \"scopeguard-1.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.scopeguard-1.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__sec1-0.7.3\",\n        sha256 = \"d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/sec1/0.7.3/download\"],\n        strip_prefix = \"sec1-0.7.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.sec1-0.7.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__semver-0.9.0\",\n        sha256 = \"1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/semver/0.9.0/download\"],\n        strip_prefix = \"semver-0.9.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.semver-0.9.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__semver-parser-0.7.0\",\n        sha256 = \"388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/semver-parser/0.7.0/download\"],\n        strip_prefix = \"semver-parser-0.7.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.semver-parser-0.7.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__serde-1.0.228\",\n        sha256 = \"9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/serde/1.0.228/download\"],\n        strip_prefix = \"serde-1.0.228\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.serde-1.0.228.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__serde_core-1.0.228\",\n        sha256 = \"41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/serde_core/1.0.228/download\"],\n        strip_prefix = \"serde_core-1.0.228\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.serde_core-1.0.228.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__serde_derive-1.0.228\",\n        sha256 = \"d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/serde_derive/1.0.228/download\"],\n        strip_prefix = \"serde_derive-1.0.228\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.serde_derive-1.0.228.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__serde_json5-0.2.1\",\n        sha256 = \"5d34d03f54462862f2a42918391c9526337f53171eaa4d8894562be7f252edd3\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/serde_json5/0.2.1/download\"],\n        strip_prefix = \"serde_json5-0.2.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.serde_json5-0.2.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__sha2-0.10.9\",\n        sha256 = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/sha2/0.10.9/download\"],\n        strip_prefix = \"sha2-0.10.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.sha2-0.10.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__sha3-0.10.9\",\n        sha256 = \"77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/sha3/0.10.9/download\"],\n        strip_prefix = \"sha3-0.10.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.sha3-0.10.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__signal-hook-registry-1.4.8\",\n        sha256 = \"c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/signal-hook-registry/1.4.8/download\"],\n        strip_prefix = \"signal-hook-registry-1.4.8\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.signal-hook-registry-1.4.8.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__signature-2.2.0\",\n        sha256 = \"77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/signature/2.2.0/download\"],\n        strip_prefix = \"signature-2.2.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.signature-2.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__simd-adler32-0.3.9\",\n        sha256 = \"703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/simd-adler32/0.3.9/download\"],\n        strip_prefix = \"simd-adler32-0.3.9\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.simd-adler32-0.3.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__slab-0.4.12\",\n        sha256 = \"0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/slab/0.4.12/download\"],\n        strip_prefix = \"slab-0.4.12\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.slab-0.4.12.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__smallvec-1.15.1\",\n        sha256 = \"67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/smallvec/1.15.1/download\"],\n        strip_prefix = \"smallvec-1.15.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.smallvec-1.15.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__smbus-pec-1.0.1\",\n        sha256 = \"ca0763a680cd5d72b28f7bfc8a054c117d8841380a6ad4f72f05bd2a34217d3e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/smbus-pec/1.0.1/download\"],\n        strip_prefix = \"smbus-pec-1.0.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.smbus-pec-1.0.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__smlang-0.8.0\",\n        sha256 = \"1de84f9f80bbe6272174e2bfdb8cf7ce4815b218038a42161c2f21c1d872c215\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/smlang/0.8.0/download\"],\n        strip_prefix = \"smlang-0.8.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.smlang-0.8.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__smlang-macros-0.8.0\",\n        sha256 = \"231b4425dcc43afc7e18c34e7c6738cd252d42d91d909c948df14107c9ae79f1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/smlang-macros/0.8.0/download\"],\n        strip_prefix = \"smlang-macros-0.8.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.smlang-macros-0.8.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__socket2-0.6.3\",\n        sha256 = \"3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/socket2/0.6.3/download\"],\n        strip_prefix = \"socket2-0.6.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.socket2-0.6.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__stable_deref_trait-1.2.1\",\n        sha256 = \"6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/stable_deref_trait/1.2.1/download\"],\n        strip_prefix = \"stable_deref_trait-1.2.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.stable_deref_trait-1.2.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__string_morph-0.1.0\",\n        sha256 = \"183aaf7fa637cc7b5f54c45b8f7cb6e8d73831f9f75a56b6defa5bf8c51d1699\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/string_morph/0.1.0/download\"],\n        strip_prefix = \"string_morph-0.1.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.string_morph-0.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__strsim-0.11.1\",\n        sha256 = \"7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/strsim/0.11.1/download\"],\n        strip_prefix = \"strsim-0.11.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.strsim-0.11.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__subtle-2.6.1\",\n        sha256 = \"13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/subtle/2.6.1/download\"],\n        strip_prefix = \"subtle-2.6.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.subtle-2.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__syn-1.0.109\",\n        sha256 = \"72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/syn/1.0.109/download\"],\n        strip_prefix = \"syn-1.0.109\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.syn-1.0.109.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__syn-2.0.117\",\n        sha256 = \"e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/syn/2.0.117/download\"],\n        strip_prefix = \"syn-2.0.117\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.syn-2.0.117.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__terminal_size-0.4.4\",\n        sha256 = \"230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/terminal_size/0.4.4/download\"],\n        strip_prefix = \"terminal_size-0.4.4\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.terminal_size-0.4.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__thiserror-2.0.18\",\n        sha256 = \"4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/thiserror/2.0.18/download\"],\n        strip_prefix = \"thiserror-2.0.18\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.thiserror-2.0.18.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__thiserror-impl-2.0.18\",\n        sha256 = \"ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/thiserror-impl/2.0.18/download\"],\n        strip_prefix = \"thiserror-impl-2.0.18\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.thiserror-impl-2.0.18.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"rust_crates__tock-registers-0.9.0\",\n        commit = \"9554639b17501a9f5940cef7a1770a0823e790c3\",\n        init_submodules = True,\n        remote = \"https://github.com/tock/tock.git\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.tock-registers-0.9.0.bazel\"),\n        strip_prefix = \"libraries/tock-register-interface\",\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__tokio-1.52.1\",\n        sha256 = \"b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/tokio/1.52.1/download\"],\n        strip_prefix = \"tokio-1.52.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.tokio-1.52.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__tokio-macros-2.7.0\",\n        sha256 = \"385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/tokio-macros/2.7.0/download\"],\n        strip_prefix = \"tokio-macros-2.7.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.tokio-macros-2.7.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__tokio-util-0.7.18\",\n        sha256 = \"9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/tokio-util/0.7.18/download\"],\n        strip_prefix = \"tokio-util-0.7.18\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.tokio-util-0.7.18.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__twox-hash-2.1.2\",\n        sha256 = \"9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/twox-hash/2.1.2/download\"],\n        strip_prefix = \"twox-hash-2.1.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.twox-hash-2.1.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__typenum-1.20.0\",\n        sha256 = \"40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/typenum/1.20.0/download\"],\n        strip_prefix = \"typenum-1.20.0\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.typenum-1.20.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__ucd-trie-0.1.7\",\n        sha256 = \"2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ucd-trie/0.1.7/download\"],\n        strip_prefix = \"ucd-trie-0.1.7\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.ucd-trie-0.1.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__unicode-ident-1.0.24\",\n        sha256 = \"e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/unicode-ident/1.0.24/download\"],\n        strip_prefix = \"unicode-ident-1.0.24\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.unicode-ident-1.0.24.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__universal-hash-0.5.1\",\n        sha256 = \"fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/universal-hash/0.5.1/download\"],\n        strip_prefix = \"universal-hash-0.5.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.universal-hash-0.5.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__utf8parse-0.2.2\",\n        sha256 = \"06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/utf8parse/0.2.2/download\"],\n        strip_prefix = \"utf8parse-0.2.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.utf8parse-0.2.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__uuid-1.23.1\",\n        sha256 = \"ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/uuid/1.23.1/download\"],\n        strip_prefix = \"uuid-1.23.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.uuid-1.23.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__vcell-0.1.3\",\n        sha256 = \"77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/vcell/0.1.3/download\"],\n        strip_prefix = \"vcell-0.1.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.vcell-0.1.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__version_check-0.9.5\",\n        sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n        strip_prefix = \"version_check-0.9.5\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.version_check-0.9.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__void-1.0.2\",\n        sha256 = \"6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/void/1.0.2/download\"],\n        strip_prefix = \"void-1.0.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.void-1.0.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__volatile-register-0.2.2\",\n        sha256 = \"de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/volatile-register/0.2.2/download\"],\n        strip_prefix = \"volatile-register-0.2.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.volatile-register-0.2.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__wasi-0.11.1-wasi-snapshot-preview1\",\n        sha256 = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download\"],\n        strip_prefix = \"wasi-0.11.1+wasi-snapshot-preview1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__windows-link-0.2.1\",\n        sha256 = \"f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/windows-link/0.2.1/download\"],\n        strip_prefix = \"windows-link-0.2.1\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.windows-link-0.2.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__windows-sys-0.61.2\",\n        sha256 = \"ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/windows-sys/0.61.2/download\"],\n        strip_prefix = \"windows-sys-0.61.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.windows-sys-0.61.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__zerocopy-0.8.48\",\n        sha256 = \"eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zerocopy/0.8.48/download\"],\n        strip_prefix = \"zerocopy-0.8.48\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.zerocopy-0.8.48.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__zerocopy-derive-0.8.48\",\n        sha256 = \"70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.48/download\"],\n        strip_prefix = \"zerocopy-derive-0.8.48\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.zerocopy-derive-0.8.48.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__zeroize-1.8.2\",\n        sha256 = \"b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zeroize/1.8.2/download\"],\n        strip_prefix = \"zeroize-1.8.2\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.zeroize-1.8.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"rust_crates__zeroize_derive-1.4.3\",\n        sha256 = \"85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zeroize_derive/1.4.3/download\"],\n        strip_prefix = \"zeroize_derive-1.4.3\",\n        build_file = Label(\"@rust_crates//rust_crates:BUILD.zeroize_derive-1.4.3.bazel\"),\n    )\n\n    return [\n       struct(repo=\"rust_crates__aes-0.8.4\", is_dev_dep = False),\n       struct(repo=\"rust_crates__aes-gcm-0.10.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__aligned-0.4.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__anyhow-1.0.102\", is_dev_dep = False),\n       struct(repo=\"rust_crates__bitfield-0.14.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__bitfield-struct-0.11.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__bitflags-2.11.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__byteorder-1.5.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__cfg-if-1.0.4\", is_dev_dep = False),\n       struct(repo=\"rust_crates__cipher-0.4.4\", is_dev_dep = False),\n       struct(repo=\"rust_crates__clap-4.6.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__compiler_builtins-0.1.160\", is_dev_dep = False),\n       struct(repo=\"rust_crates__cortex-m-0.7.7\", is_dev_dep = False),\n       struct(repo=\"rust_crates__cortex-m-rt-0.7.5\", is_dev_dep = False),\n       struct(repo=\"rust_crates__cortex-m-semihosting-0.5.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__ctr-0.9.2\", is_dev_dep = False),\n       struct(repo=\"rust_crates__ecdsa-0.16.9\", is_dev_dep = False),\n       struct(repo=\"rust_crates__embedded-hal-1.0.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__embedded-hal-async-1.0.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__embedded-hal-nb-1.0.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__embedded-io-0.6.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__fugit-0.3.9\", is_dev_dep = False),\n       struct(repo=\"rust_crates__futures-0.3.32\", is_dev_dep = False),\n       struct(repo=\"rust_crates__heapless-0.9.2\", is_dev_dep = False),\n       struct(repo=\"rust_crates__hex-0.4.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__hex-literal-0.4.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__hmac-0.12.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__k256-0.13.4\", is_dev_dep = False),\n       struct(repo=\"rust_crates__log-0.4.29\", is_dev_dep = False),\n       struct(repo=\"rust_crates__mctp-0.2.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__mctp-lib-0.1.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__memoffset-0.9.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__minijinja-2.19.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__nb-1.1.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__nom-7.1.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__object-0.37.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__openprot-hal-blocking-0.1.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__p256-0.13.2\", is_dev_dep = False),\n       struct(repo=\"rust_crates__p384-0.13.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__panic-halt-1.0.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__paste-1.0.15\", is_dev_dep = False),\n       struct(repo=\"rust_crates__proc-macro2-1.0.106\", is_dev_dep = False),\n       struct(repo=\"rust_crates__prost-0.13.5\", is_dev_dep = False),\n       struct(repo=\"rust_crates__quote-1.0.45\", is_dev_dep = False),\n       struct(repo=\"rust_crates__rand_core-0.9.5\", is_dev_dep = False),\n       struct(repo=\"rust_crates__riscv-0.12.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__riscv-rt-0.12.2\", is_dev_dep = False),\n       struct(repo=\"rust_crates__riscv-semihosting-0.1.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__rustc-demangle-0.1.27\", is_dev_dep = False),\n       struct(repo=\"rust_crates__sec1-0.7.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__serde-1.0.228\", is_dev_dep = False),\n       struct(repo=\"rust_crates__serde_derive-1.0.228\", is_dev_dep = False),\n       struct(repo=\"rust_crates__serde_json5-0.2.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__sha2-0.10.9\", is_dev_dep = False),\n       struct(repo=\"rust_crates__sha3-0.10.9\", is_dev_dep = False),\n       struct(repo=\"rust_crates__smlang-0.8.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__subtle-2.6.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__syn-1.0.109\", is_dev_dep = False),\n       struct(repo=\"rust_crates__syn-2.0.117\", is_dev_dep = False),\n       struct(repo=\"rust_crates__thiserror-2.0.18\", is_dev_dep = False),\n       struct(repo=\"rust_crates__tock-registers-0.9.0\", is_dev_dep = False),\n       struct(repo=\"rust_crates__tokio-1.52.1\", is_dev_dep = False),\n       struct(repo=\"rust_crates__tokio-util-0.7.18\", is_dev_dep = False),\n       struct(repo=\"rust_crates__vcell-0.1.3\", is_dev_dep = False),\n       struct(repo=\"rust_crates__zerocopy-0.8.48\", is_dev_dep = False),\n       struct(repo=\"rust_crates__zeroize-1.8.2\", is_dev_dep = False),\n    ]\n"
               }
             }
           },
@@ -2932,22 +2932,6 @@
               "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'openprot'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"as_slice\",\n    deps = [\n        \"@rust_crates__stable_deref_trait-1.2.1//:stable_deref_trait\",\n    ],\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_root = \"src/lib.rs\",\n    edition = \"2015\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=as-slice\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"0.2.1\",\n)\n"
             }
           },
-          "rust_crates__async-trait-0.1.89": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "patch_args": [],
-              "patch_tool": "",
-              "patches": [],
-              "remote_patch_strip": 1,
-              "sha256": "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb",
-              "type": "tar.gz",
-              "urls": [
-                "https://static.crates.io/crates/async-trait/0.1.89/download"
-              ],
-              "strip_prefix": "async-trait-0.1.89",
-              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'openprot'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n    name = \"async_trait\",\n    deps = [\n        \"@rust_crates__proc-macro2-1.0.106//:proc_macro2\",\n        \"@rust_crates__quote-1.0.45//:quote\",\n        \"@rust_crates__syn-2.0.117//:syn\",\n    ],\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_root = \"src/lib.rs\",\n    edition = \"2021\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=async-trait\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"0.1.89\",\n)\n"
-            }
-          },
           "rust_crates__autocfg-1.5.0": {
             "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
             "attributes": {
@@ -3636,22 +3620,6 @@
               "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'openprot'\n###############################################################################\n\nload(\n    \"@rules_rust//cargo:defs.bzl\",\n    \"cargo_build_script\",\n    \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"embedded_io_async\",\n    deps = [\n        \"@rust_crates__embedded-io-0.6.1//:embedded_io\",\n        \"@rust_crates__embedded-io-async-0.6.1//:build_script_build\",\n    ],\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_root = \"src/lib.rs\",\n    edition = \"2021\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=embedded-io-async\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"0.6.1\",\n)\n\ncargo_build_script(\n    name = \"_bs\",\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \"**/*.rs\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_name = \"build_script_build\",\n    crate_root = \"build.rs\",\n    data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    edition = \"2021\",\n    pkg_name = \"embedded-io-async\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=embedded-io-async\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    version = \"0.6.1\",\n    visibility = [\"//visibility:private\"],\n)\n\nalias(\n    name = \"build_script_build\",\n    actual = \":_bs\",\n    tags = [\"manual\"],\n)\n"
             }
           },
-          "rust_crates__embedded-storage-0.3.1": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "patch_args": [],
-              "patch_tool": "",
-              "patches": [],
-              "remote_patch_strip": 1,
-              "sha256": "a21dea9854beb860f3062d10228ce9b976da520a73474aed3171ec276bc0c032",
-              "type": "tar.gz",
-              "urls": [
-                "https://static.crates.io/crates/embedded-storage/0.3.1/download"
-              ],
-              "strip_prefix": "embedded-storage-0.3.1",
-              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'openprot'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"embedded_storage\",\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_root = \"src/lib.rs\",\n    edition = \"2018\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=embedded-storage\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"0.3.1\",\n)\n"
-            }
-          },
           "rust_crates__equivalent-1.0.2": {
             "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
             "attributes": {
@@ -4748,20 +4716,6 @@
               "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'openprot'\n###############################################################################\n\nload(\n    \"@rules_rust//cargo:defs.bzl\",\n    \"cargo_build_script\",\n    \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"proc_macro2\",\n    deps = [\n        \"@rust_crates__proc-macro2-1.0.106//:build_script_build\",\n        \"@rust_crates__unicode-ident-1.0.24//:unicode_ident\",\n    ],\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"default\",\n        \"proc-macro\",\n    ],\n    crate_root = \"src/lib.rs\",\n    edition = \"2021\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=proc-macro2\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"1.0.106\",\n)\n\ncargo_build_script(\n    name = \"_bs\",\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \"**/*.rs\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"default\",\n        \"proc-macro\",\n    ],\n    crate_name = \"build_script_build\",\n    crate_root = \"build.rs\",\n    data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    edition = \"2021\",\n    pkg_name = \"proc-macro2\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=proc-macro2\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    version = \"1.0.106\",\n    visibility = [\"//visibility:private\"],\n)\n\nalias(\n    name = \"build_script_build\",\n    actual = \":_bs\",\n    tags = [\"manual\"],\n)\n"
             }
           },
-          "rust_crates__proposed-traits-0.1.0": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository",
-            "attributes": {
-              "init_submodules": true,
-              "patch_args": [],
-              "patch_tool": "",
-              "patches": [],
-              "shallow_since": "",
-              "remote": "https://github.com/rusty1968/proposed_traits.git",
-              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'openprot'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"proposed_traits\",\n    deps = [\n        \"@rust_crates__embedded-hal-1.0.0//:embedded_hal\",\n        \"@rust_crates__embedded-io-0.6.1//:embedded_io\",\n        \"@rust_crates__embedded-storage-0.3.1//:embedded_storage\",\n        \"@rust_crates__rand_core-0.6.4//:rand_core\",\n    ],\n    proc_macro_deps = [\n        \"@rust_crates__async-trait-0.1.89//:async_trait\",\n    ],\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_root = \"src/lib.rs\",\n    edition = \"2021\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=proposed-traits\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"0.1.0\",\n)\n",
-              "strip_prefix": "proposed-traits",
-              "commit": "85641310df5a5276c67f81621b104322cff0286c"
-            }
-          },
           "rust_crates__prost-0.13.5": {
             "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
             "attributes": {
@@ -5479,7 +5433,7 @@
                 "https://static.crates.io/crates/syn/2.0.117/download"
               ],
               "strip_prefix": "syn-2.0.117",
-              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'openprot'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"syn\",\n    deps = [\n        \"@rust_crates__proc-macro2-1.0.106//:proc_macro2\",\n        \"@rust_crates__quote-1.0.45//:quote\",\n        \"@rust_crates__unicode-ident-1.0.24//:unicode_ident\",\n    ],\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"clone-impls\",\n        \"default\",\n        \"derive\",\n        \"extra-traits\",\n        \"full\",\n        \"parsing\",\n        \"printing\",\n        \"proc-macro\",\n    ] + select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n            \"visit\",  # aarch64-apple-darwin\n            \"visit-mut\",  # aarch64-apple-darwin\n        ],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [\n            \"visit\",  # aarch64-unknown-linux-gnu\n            \"visit-mut\",  # aarch64-unknown-linux-gnu\n        ],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [\n            \"visit\",  # x86_64-apple-darwin\n            \"visit-mut\",  # x86_64-apple-darwin\n        ],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n            \"visit\",  # x86_64-unknown-linux-gnu\n            \"visit-mut\",  # x86_64-unknown-linux-gnu\n        ],\n        \"//conditions:default\": [],\n    }),\n    crate_root = \"src/lib.rs\",\n    edition = \"2021\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=syn\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"2.0.117\",\n)\n"
+              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'openprot'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"syn\",\n    deps = [\n        \"@rust_crates__proc-macro2-1.0.106//:proc_macro2\",\n        \"@rust_crates__quote-1.0.45//:quote\",\n        \"@rust_crates__unicode-ident-1.0.24//:unicode_ident\",\n    ],\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"clone-impls\",\n        \"default\",\n        \"derive\",\n        \"extra-traits\",\n        \"full\",\n        \"parsing\",\n        \"printing\",\n        \"proc-macro\",\n    ] + select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n            \"visit\",  # aarch64-apple-darwin\n        ],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [\n            \"visit\",  # aarch64-unknown-linux-gnu\n        ],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [\n            \"visit\",  # x86_64-apple-darwin\n        ],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n            \"visit\",  # x86_64-unknown-linux-gnu\n        ],\n        \"//conditions:default\": [],\n    }),\n    crate_root = \"src/lib.rs\",\n    edition = \"2021\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=syn\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"2.0.117\",\n)\n"
             }
           },
           "rust_crates__terminal_size-0.4.4": {
diff --git a/target/ast10x0/backend/usart/src/lib.rs b/target/ast10x0/backend/usart/src/lib.rs
index 52c1cac..115c731 100644
--- a/target/ast10x0/backend/usart/src/lib.rs
+++ b/target/ast10x0/backend/usart/src/lib.rs
@@ -24,11 +24,6 @@
         // target/ast10x0/usart/system.json5.
         let uart = unsafe { Usart::new(0x7e78_4000 as *const _) };
 
-        // The peripheral driver's `Usart::new` enables every IER source.
-        // Mask the ones the trait exposes so the server inherits a quiet
-        // device and only the interrupts a client explicitly enables fire.
-        // uart.clear_rx_data_available_interrupt();
-        // uart.clear_tx_idle_interrupt();
         // ELSI and EDSSI were also left enabled. EDSSI fires immediately if
         // the MSR delta bits (DCTS/DDSR/TERI/DDCD) are set at init — QEMU
         // sets them — causing a continuous IRQ that the server acks and
diff --git a/target/ast10x0/harness/BUILD.bazel b/target/ast10x0/harness/BUILD.bazel
index 5a4c437..82dfee8 100644
--- a/target/ast10x0/harness/BUILD.bazel
+++ b/target/ast10x0/harness/BUILD.bazel
@@ -1,4 +1,5 @@
 # Licensed under the Apache-2.0 license
+# SPDX-License-Identifier: Apache-2.0
 
 load("@rules_platform//platform_data:defs.bzl", "platform_data")
 load("@rules_python//python:py_binary.bzl", "py_binary")
@@ -12,8 +13,8 @@
     # visible as @qemu from our module). If this breaks after a pigweed
     # upgrade, run: ls $(bazel info output_base)/external/ | grep qemu
     deps = [
-        "@pigweed//pw_tokenizer/py:detokenize",
         "@@pigweed++_repo_rules5+qemu//:qemu-system-arm-runfiles",
+        "@pigweed//pw_tokenizer/py:detokenize",
         "@rules_python//python/runfiles",
     ],
 )
@@ -28,8 +29,8 @@
 py_binary(
     name = "test_runner_bin",
     srcs = [
-        "test_runner.py",
         "pi_test_runner.py",
+        "test_runner.py",
     ],
     data = ["evb_config.toml"],
     main = "test_runner.py",
diff --git a/target/ast10x0/harness/evb_config.toml b/target/ast10x0/harness/evb_config.toml
index f0e86d6..249e6d9 100644
--- a/target/ast10x0/harness/evb_config.toml
+++ b/target/ast10x0/harness/evb_config.toml
@@ -1,3 +1,6 @@
+# Licensed under the Apache-2.0 license
+# SPDX-License-Identifier: Apache-2.0
+
 [gpio]
 srst_pin = 23
 fwspick_pin = 18
diff --git a/target/ast10x0/harness/i2c_monitor.py b/target/ast10x0/harness/i2c_monitor.py
index 7a732df..0db6dbc 100755
--- a/target/ast10x0/harness/i2c_monitor.py
+++ b/target/ast10x0/harness/i2c_monitor.py
@@ -1,4 +1,6 @@
 #!/usr/bin/env python3
+# Licensed under the Apache-2.0 license
+# SPDX-License-Identifier: Apache-2.0
 """
 I2C/SMBus Monitor for Beagle Bus Analyzer with MCTP/SPDM Support
 Automatically connects to the first available device and listens for I2C transactions.
@@ -14,14 +16,15 @@
 # Add the Beagle API to the path
 # Assumes script runs at the same level as beagle-api-linux-x86_64-v6.00 directory
 script_dir = os.path.dirname(os.path.abspath(__file__))
-beagle_lib_path = os.path.join(script_dir, 'beagle-api-linux-x86_64-v6.00', 'python')
+beagle_lib_path = os.path.join(script_dir, "beagle-api-linux-x86_64-v6.00", "python")
 sys.path.insert(0, beagle_lib_path)
 from beagle_py import *
 
 
-#==========================================================================
+# ==========================================================================
 # MCTP/SPDM PARSING CODE (from mctp-parse)
-#==========================================================================
+# ==========================================================================
+
 
 class SPDMParser:
     """Parser for SPDM messages (DSP0274)"""
@@ -102,40 +105,40 @@
 
         # Byte 0: SPDM version (major [7:4], minor [3:0])
         version_byte = payload[0]
-        result['version_major'] = (version_byte >> 4) & 0x0F
-        result['version_minor'] = version_byte & 0x0F
-        result['version'] = f"{result['version_major']}.{result['version_minor']}"
+        result["version_major"] = (version_byte >> 4) & 0x0F
+        result["version_minor"] = version_byte & 0x0F
+        result["version"] = f"{result['version_major']}.{result['version_minor']}"
 
         # Byte 1: Request/Response code
         code = payload[1]
-        result['code'] = code
+        result["code"] = code
 
         # Determine if request or response
         if code in SPDMParser.REQUEST_CODES:
-            result['msg_direction'] = "Request"
-            result['msg_name'] = SPDMParser.REQUEST_CODES[code]
+            result["msg_direction"] = "Request"
+            result["msg_name"] = SPDMParser.REQUEST_CODES[code]
         elif code in SPDMParser.RESPONSE_CODES:
-            result['msg_direction'] = "Response"
-            result['msg_name'] = SPDMParser.RESPONSE_CODES[code]
+            result["msg_direction"] = "Response"
+            result["msg_name"] = SPDMParser.RESPONSE_CODES[code]
         else:
-            result['msg_direction'] = "Unknown"
-            result['msg_name'] = f"Unknown (0x{code:02X})"
+            result["msg_direction"] = "Unknown"
+            result["msg_name"] = f"Unknown (0x{code:02X})"
 
         # Byte 2: Param1 (if present)
         if len(payload) > 2:
-            result['param1'] = payload[2]
+            result["param1"] = payload[2]
 
         # Byte 3: Param2 (if present)
         if len(payload) > 3:
-            result['param2'] = payload[3]
+            result["param2"] = payload[3]
 
         # Remaining data
         if len(payload) > 4:
-            result['data'] = payload[4:]
-            result['data_len'] = len(result['data'])
+            result["data"] = payload[4:]
+            result["data_len"] = len(result["data"])
         else:
-            result['data'] = []
-            result['data_len'] = 0
+            result["data"] = []
+            result["data_len"] = 0
 
         return result
 
@@ -160,52 +163,57 @@
     def parse(data: List[int]) -> dict:
         """Parse MCTP packet and return structured data"""
         if len(data) < 4:
-            raise ValueError("Packet too short - minimum 4 bytes required for MCTP header")
+            raise ValueError(
+                "Packet too short - minimum 4 bytes required for MCTP header"
+            )
 
         result = {}
 
         # Byte 0: Destination EID
-        result['dest_eid'] = data[0]
+        result["dest_eid"] = data[0]
 
         # Byte 1: Header Version [7:4], Reserved [3:0]
         byte1 = data[1]
-        result['header_version'] = (byte1 >> 4) & 0x0F
-        result['rsvd'] = byte1 & 0x0F
+        result["header_version"] = (byte1 >> 4) & 0x0F
+        result["rsvd"] = byte1 & 0x0F
 
         # Byte 2: Source EID
-        result['src_eid'] = data[2]
+        result["src_eid"] = data[2]
 
         # Byte 3: SOM, EOM, Pkt_Seq, TO, Msg_Tag
         byte3 = data[3]
-        result['som'] = bool(byte3 & 0x80)  # Start of Message
-        result['eom'] = bool(byte3 & 0x40)  # End of Message
-        result['pkt_seq'] = (byte3 >> 4) & 0x03  # Packet sequence number
-        result['to'] = bool(byte3 & 0x08)  # Tag Owner
-        result['msg_tag'] = byte3 & 0x07  # Message Tag
+        result["som"] = bool(byte3 & 0x80)  # Start of Message
+        result["eom"] = bool(byte3 & 0x40)  # End of Message
+        result["pkt_seq"] = (byte3 >> 4) & 0x03  # Packet sequence number
+        result["to"] = bool(byte3 & 0x08)  # Tag Owner
+        result["msg_tag"] = byte3 & 0x07  # Message Tag
 
         # Message body starts at byte 4
         if len(data) > 4:
             # Byte 4: IC [7], Message Type [6:0]
             byte4 = data[4]
-            result['ic'] = bool(byte4 & 0x80)  # Integrity Check
-            result['msg_type'] = byte4 & 0x7F
-            result['msg_type_name'] = MCTPParser.MESSAGE_TYPES.get(
-                result['msg_type'],
-                f"Vendor Defined (0x{result['msg_type']:02X})" if result['msg_type'] >= 0x7E
-                else f"Reserved (0x{result['msg_type']:02X})"
+            result["ic"] = bool(byte4 & 0x80)  # Integrity Check
+            result["msg_type"] = byte4 & 0x7F
+            result["msg_type_name"] = MCTPParser.MESSAGE_TYPES.get(
+                result["msg_type"],
+                (
+                    f"Vendor Defined (0x{result['msg_type']:02X})"
+                    if result["msg_type"] >= 0x7E
+                    else f"Reserved (0x{result['msg_type']:02X})"
+                ),
             )
 
             # Payload starts at byte 5
             if len(data) > 5:
-                result['payload'] = data[5:]
-                result['payload_len'] = len(result['payload'])
+                result["payload"] = data[5:]
+                result["payload_len"] = len(result["payload"])
 
                 # Parse SPDM if message type is 0x05
-                if result['msg_type'] == 0x05 and result['payload_len'] > 0:
-                    result['spdm'] = SPDMParser.parse(result['payload'])
+                if result["msg_type"] == 0x05 and result["payload_len"] > 0:
+                    result["spdm"] = SPDMParser.parse(result["payload"])
             else:
-                result['payload'] = []
-                result['payload_len'] = 0
+                result["payload"] = []
+                result["payload_len"] = 0
 
         return result
 
@@ -245,10 +253,10 @@
         return None
 
     result = {}
-    result['cmd_code'] = data[0]
-    result['byte_count'] = data[1]
+    result["cmd_code"] = data[0]
+    result["byte_count"] = data[1]
 
-    expected_total = 2 + result['byte_count']
+    expected_total = 2 + result["byte_count"]
     if expect_pec:
         expected_total += 1
 
@@ -256,48 +264,49 @@
         return None
 
     if expect_pec and len(data) >= expected_total:
-        result['pec_received'] = data[expected_total - 1]
+        result["pec_received"] = data[expected_total - 1]
         # Calculate expected PEC
-        pec_data = data[:expected_total - 1]
-        result['pec_calculated'] = calculate_pec(pec_data)
-        result['pec_valid'] = (result['pec_received'] == result['pec_calculated'])
+        pec_data = data[: expected_total - 1]
+        result["pec_calculated"] = calculate_pec(pec_data)
+        result["pec_valid"] = result["pec_received"] == result["pec_calculated"]
         data_end = expected_total - 1
     else:
-        result['pec_received'] = None
-        result['pec_calculated'] = None
-        result['pec_valid'] = None
+        result["pec_received"] = None
+        result["pec_calculated"] = None
+        result["pec_valid"] = None
         data_end = min(len(data), expected_total)
 
     # SMBus-specific headers start at byte 2
-    if result['byte_count'] < 5:
+    if result["byte_count"] < 5:
         return None
 
     offset = 2
-    result['source_slave_addr'] = data[offset]
+    result["source_slave_addr"] = data[offset]
     offset += 1
 
     # MCTP reserved + header version
     byte_hdr = data[offset]
-    result['mctp_reserved'] = (byte_hdr >> 4) & 0x0F
-    result['mctp_hdr_version'] = byte_hdr & 0x0F
+    result["mctp_reserved"] = (byte_hdr >> 4) & 0x0F
+    result["mctp_hdr_version"] = byte_hdr & 0x0F
     offset += 1
 
     # Destination and Source EIDs
-    result['dest_eid'] = data[offset]
+    result["dest_eid"] = data[offset]
     offset += 1
-    result['src_eid'] = data[offset]
+    result["src_eid"] = data[offset]
     offset += 1
 
     # MCTP packet starts here (SOM/EOM byte)
-    result['mctp_offset'] = offset
-    result['mctp_data'] = data[offset:data_end]
+    result["mctp_offset"] = offset
+    result["mctp_data"] = data[offset:data_end]
 
     return result
 
 
-#==========================================================================
+# ==========================================================================
 # MCTP MESSAGE ASSEMBLER
-#==========================================================================
+# ==========================================================================
+
 
 class MCTPAssembler:
     """Assembles fragmented MCTP messages"""
@@ -312,22 +321,22 @@
         Add a fragment and return complete message if EOM is reached.
         Returns None if message is incomplete.
         """
-        key = (mctp_data['src_eid'], mctp_data['dest_eid'], mctp_data['msg_tag'])
+        key = (mctp_data["src_eid"], mctp_data["dest_eid"], mctp_data["msg_tag"])
 
         # SOM - start new session
-        if mctp_data['som']:
+        if mctp_data["som"]:
             self.sessions[key] = {
-                'fragments': [mctp_data],
-                'expected_seq': (mctp_data['pkt_seq'] + 1) % 4,
-                'src_eid': mctp_data['src_eid'],
-                'dest_eid': mctp_data['dest_eid'],
-                'msg_tag': mctp_data['msg_tag'],
-                'msg_type': mctp_data.get('msg_type'),
-                'msg_type_name': mctp_data.get('msg_type_name'),
+                "fragments": [mctp_data],
+                "expected_seq": (mctp_data["pkt_seq"] + 1) % 4,
+                "src_eid": mctp_data["src_eid"],
+                "dest_eid": mctp_data["dest_eid"],
+                "msg_tag": mctp_data["msg_tag"],
+                "msg_type": mctp_data.get("msg_type"),
+                "msg_type_name": mctp_data.get("msg_type_name"),
             }
 
             # Single packet message (SOM+EOM)
-            if mctp_data['eom']:
+            if mctp_data["eom"]:
                 session = self.sessions.pop(key)
                 return self._assemble_session(session)
 
@@ -341,16 +350,16 @@
         session = self.sessions[key]
 
         # Check sequence number
-        if mctp_data['pkt_seq'] != session['expected_seq']:
+        if mctp_data["pkt_seq"] != session["expected_seq"]:
             # Sequence error - drop session
             del self.sessions[key]
             return None
 
-        session['fragments'].append(mctp_data)
-        session['expected_seq'] = (mctp_data['pkt_seq'] + 1) % 4
+        session["fragments"].append(mctp_data)
+        session["expected_seq"] = (mctp_data["pkt_seq"] + 1) % 4
 
         # EOM - assemble complete message
-        if mctp_data['eom']:
+        if mctp_data["eom"]:
             complete_session = self.sessions.pop(key)
             return self._assemble_session(complete_session)
 
@@ -360,31 +369,32 @@
         """Assemble fragments into complete message"""
         # Combine all payloads
         complete_payload = []
-        for frag in session['fragments']:
-            if 'payload' in frag and frag['payload']:
-                complete_payload.extend(frag['payload'])
+        for frag in session["fragments"]:
+            if "payload" in frag and frag["payload"]:
+                complete_payload.extend(frag["payload"])
 
         result = {
-            'src_eid': session['src_eid'],
-            'dest_eid': session['dest_eid'],
-            'msg_tag': session['msg_tag'],
-            'msg_type': session['msg_type'],
-            'msg_type_name': session['msg_type_name'],
-            'payload': complete_payload,
-            'payload_len': len(complete_payload),
-            'fragment_count': len(session['fragments']),
+            "src_eid": session["src_eid"],
+            "dest_eid": session["dest_eid"],
+            "msg_tag": session["msg_tag"],
+            "msg_type": session["msg_type"],
+            "msg_type_name": session["msg_type_name"],
+            "payload": complete_payload,
+            "payload_len": len(complete_payload),
+            "fragment_count": len(session["fragments"]),
         }
 
         # Parse SPDM if applicable
-        if session['msg_type'] == 0x05 and complete_payload:
-            result['spdm'] = SPDMParser.parse(complete_payload)
+        if session["msg_type"] == 0x05 and complete_payload:
+            result["spdm"] = SPDMParser.parse(complete_payload)
 
         return result
 
 
-#==========================================================================
+# ==========================================================================
 # BEAGLE DEVICE FUNCTIONS
-#==========================================================================
+# ==========================================================================
+
 
 def find_and_connect():
     """Find and connect to the first available Beagle device."""
@@ -407,7 +417,9 @@
 
         if not (port & BG_PORT_NOT_FREE):
             device_port = port
-            print(f"Connecting to device on port {port} (S/N: {unique_id:04d}-{unique_id % 1000000:06d})")
+            print(
+                f"Connecting to device on port {port} (S/N: {unique_id:04d}-{unique_id % 1000000:06d})"
+            )
             break
         else:
             print(f"Port {port & ~BG_PORT_NOT_FREE} is in use")
@@ -455,9 +467,10 @@
         print("Host interface: full speed")
 
 
-#==========================================================================
+# ==========================================================================
 # MONITORING FUNCTIONS
-#==========================================================================
+# ==========================================================================
+
 
 def monitor_i2c(beagle, args, max_packet_len=256):
     """Monitor and print I2C transactions with optional MCTP/SPDM parsing."""
@@ -472,9 +485,9 @@
         print("Error: Could not enable I2C capture!")
         sys.exit(1)
 
-    print("\n" + "="*80)
+    print("\n" + "=" * 80)
     print("I2C Monitoring Started - Press Ctrl+C to stop")
-    print("="*80)
+    print("=" * 80)
 
     if args.spdm:
         print("Mode: SPDM (with MCTP and SMBus)")
@@ -497,7 +510,7 @@
     else:
         print("Mode: Raw I2C")
 
-    print("="*80 + "\n")
+    print("=" * 80 + "\n")
 
     # Allocate buffers
     data_in = array_u16(max_packet_len)
@@ -509,9 +522,15 @@
     try:
         while True:
             # Read I2C transaction
-            (count, status, time_sop, time_duration,
-             time_dataoffset, data_in, timing) = \
-                bg_i2c_read_bit_timing(beagle, data_in, timing)
+            (
+                count,
+                status,
+                time_sop,
+                time_duration,
+                time_dataoffset,
+                data_in,
+                timing,
+            ) = bg_i2c_read_bit_timing(beagle, data_in, timing)
 
             # Convert timestamp to nanoseconds
             time_sop_ns = (time_sop * 1000) // (samplerate_khz // 1000)
@@ -533,19 +552,19 @@
             # Get address if present
             if not (status & BG_READ_ERR_MIDDLE_OF_PACKET) and count >= 1:
                 nack = data_in[0] & BG_I2C_MONITOR_NACK
-                if count == 1 or (data_in[0] & 0xf9) != 0xf0 or nack:
+                if count == 1 or (data_in[0] & 0xF9) != 0xF0 or nack:
                     # 7-bit address
-                    i2c_addr = (int(data_in[0] & 0xff) >> 1)
+                    i2c_addr = int(data_in[0] & 0xFF) >> 1
                     i2c_rw = "R" if (data_in[0] & 0x01) else "W"
                     offset = 1
                 else:
                     # 10-bit address
-                    i2c_addr = ((data_in[0] << 7) & 0x300) | (data_in[1] & 0xff)
+                    i2c_addr = ((data_in[0] << 7) & 0x300) | (data_in[1] & 0xFF)
                     i2c_rw = "R" if (data_in[0] & 0x01) else "W"
                     offset = 2
 
             # Extract payload bytes
-            raw_data = [int(data_in[i] & 0xff) for i in range(offset, count)]
+            raw_data = [int(data_in[i] & 0xFF) for i in range(offset, count)]
 
             # Process based on mode
             if args.smbus and raw_data:
@@ -556,10 +575,11 @@
                     try:
                         # Create synthetic MCTP packet
                         synthetic_mctp = [
-                            smbus_result['dest_eid'],
-                            (smbus_result['mctp_hdr_version'] << 4) | smbus_result['mctp_reserved'],
-                            smbus_result['src_eid']
-                        ] + smbus_result['mctp_data']
+                            smbus_result["dest_eid"],
+                            (smbus_result["mctp_hdr_version"] << 4)
+                            | smbus_result["mctp_reserved"],
+                            smbus_result["src_eid"],
+                        ] + smbus_result["mctp_data"]
 
                         mctp_parsed = MCTPParser.parse(synthetic_mctp)
 
@@ -570,17 +590,27 @@
                             if complete_msg is None:
                                 # Incomplete fragment - skip or show minimal info
                                 if not args.mctp_no_partial:
-                                    print(f"[{time_sop_ns:12d} ns] MCTP Fragment: SOM={mctp_parsed['som']} EOM={mctp_parsed['eom']} Seq={mctp_parsed['pkt_seq']}")
+                                    print(
+                                        f"[{time_sop_ns:12d} ns] MCTP Fragment: SOM={mctp_parsed['som']} EOM={mctp_parsed['eom']} Seq={mctp_parsed['pkt_seq']}"
+                                    )
                                 continue
 
                             # Complete message assembled
                             mctp_parsed = complete_msg
 
                         # Display based on mode
-                        if args.spdm and 'spdm' in mctp_parsed:
-                            print_spdm_message(time_sop_ns, i2c_addr, i2c_rw, mctp_parsed, args.mctp_hide)
+                        if args.spdm and "spdm" in mctp_parsed:
+                            print_spdm_message(
+                                time_sop_ns,
+                                i2c_addr,
+                                i2c_rw,
+                                mctp_parsed,
+                                args.mctp_hide,
+                            )
                         elif not args.spdm:
-                            print_mctp_message(time_sop_ns, i2c_addr, i2c_rw, smbus_result, mctp_parsed)
+                            print_mctp_message(
+                                time_sop_ns, i2c_addr, i2c_rw, smbus_result, mctp_parsed
+                            )
 
                     except Exception as e:
                         print(f"[{time_sop_ns:12d} ns] MCTP Parse Error: {e}")
@@ -588,7 +618,9 @@
                 elif smbus_result:
                     # SMBus mode only - skip if smbus_hide is enabled
                     if not args.smbus_hide:
-                        print_smbus_message(time_sop_ns, i2c_addr, i2c_rw, smbus_result, raw_data)
+                        print_smbus_message(
+                            time_sop_ns, i2c_addr, i2c_rw, smbus_result, raw_data
+                        )
 
                 else:
                     # Not valid SMBus MCTP - skip if smbus_hide is enabled, otherwise print raw
@@ -612,34 +644,34 @@
 
 def print_raw_i2c(timestamp, addr, rw, data, status):
     """Print raw I2C transaction"""
-    print(f"[{timestamp:12d} ns] ", end='')
+    print(f"[{timestamp:12d} ns] ", end="")
 
     if addr is not None:
-        print(f"[S] <0x{addr:02X}:{rw}> ", end='')
+        print(f"[S] <0x{addr:02X}:{rw}> ", end="")
 
     if data:
-        hex_str = ' '.join(f'0x{b:02X}' for b in data)
-        print(hex_str, end=' ')
+        hex_str = " ".join(f"0x{b:02X}" for b in data)
+        print(hex_str, end=" ")
 
     if not (status & BG_READ_I2C_NO_STOP):
-        print("[P]", end=' ')
+        print("[P]", end=" ")
 
     print()
 
 
 def print_smbus_message(timestamp, addr, rw, smbus_info, raw_data):
     """Print SMBus message with PEC info"""
-    print(f"[{timestamp:12d} ns] SMBus: ", end='')
-    print(f"Cmd=0x{smbus_info['cmd_code']:02X} Len={smbus_info['byte_count']} ", end='')
+    print(f"[{timestamp:12d} ns] SMBus: ", end="")
+    print(f"Cmd=0x{smbus_info['cmd_code']:02X} Len={smbus_info['byte_count']} ", end="")
 
-    if smbus_info['pec_valid'] is not None:
-        if smbus_info['pec_valid']:
-            print(f"PEC=✓", end=' ')
+    if smbus_info["pec_valid"] is not None:
+        if smbus_info["pec_valid"]:
+            print(f"PEC=✓", end=" ")
         else:
-            print(f"PEC=✗", end=' ')
+            print(f"PEC=✗", end=" ")
 
     # Show data
-    hex_str = ' '.join(f'{b:02X}' for b in raw_data[:16])
+    hex_str = " ".join(f"{b:02X}" for b in raw_data[:16])
     if len(raw_data) > 16:
         hex_str += "..."
     print(f"[{hex_str}]")
@@ -647,69 +679,78 @@
 
 def print_mctp_message(timestamp, addr, rw, smbus_info, mctp_parsed):
     """Print MCTP message with highlighting"""
-    som_marker = "🟢 SOM" if mctp_parsed.get('som') else ""
-    eom_marker = "🔴 EOM" if mctp_parsed.get('eom') else ""
+    som_marker = "🟢 SOM" if mctp_parsed.get("som") else ""
+    eom_marker = "🔴 EOM" if mctp_parsed.get("eom") else ""
     markers = f"{som_marker} {eom_marker}".strip()
 
-    print(f"[{timestamp:12d} ns] MCTP: ", end='')
+    print(f"[{timestamp:12d} ns] MCTP: ", end="")
     if markers:
-        print(f"{markers} ", end='')
+        print(f"{markers} ", end="")
 
-    print(f"EID {mctp_parsed['src_eid']:02X}→{mctp_parsed['dest_eid']:02X} ", end='')
-    print(f"Seq={mctp_parsed.get('pkt_seq', '?')} Tag={mctp_parsed.get('msg_tag', '?')} ", end='')
-    print(f"Type=0x{mctp_parsed.get('msg_type', 0):02X} ({mctp_parsed.get('msg_type_name', 'Unknown')})", end='')
+    print(f"EID {mctp_parsed['src_eid']:02X}→{mctp_parsed['dest_eid']:02X} ", end="")
+    print(
+        f"Seq={mctp_parsed.get('pkt_seq', '?')} Tag={mctp_parsed.get('msg_tag', '?')} ",
+        end="",
+    )
+    print(
+        f"Type=0x{mctp_parsed.get('msg_type', 0):02X} ({mctp_parsed.get('msg_type_name', 'Unknown')})",
+        end="",
+    )
 
     # Show fragment count if assembled
-    if 'fragment_count' in mctp_parsed and mctp_parsed['fragment_count'] > 1:
-        print(f" [{mctp_parsed['fragment_count']} fragments]", end='')
+    if "fragment_count" in mctp_parsed and mctp_parsed["fragment_count"] > 1:
+        print(f" [{mctp_parsed['fragment_count']} fragments]", end="")
 
     print()
 
 
 def print_spdm_message(timestamp, addr, rw, mctp_parsed, hide_mctp):
     """Print SPDM message with request/response highlighting"""
-    spdm = mctp_parsed.get('spdm')
+    spdm = mctp_parsed.get("spdm")
     if not spdm:
         return
 
     # Highlight request vs response
-    if spdm['msg_direction'] == 'Request':
+    if spdm["msg_direction"] == "Request":
         direction_marker = "📤 REQ"
-    elif spdm['msg_direction'] == 'Response':
+    elif spdm["msg_direction"] == "Response":
         direction_marker = "📥 RSP"
     else:
         direction_marker = "❓"
 
-    print(f"[{timestamp:12d} ns] SPDM: {direction_marker} ", end='')
+    print(f"[{timestamp:12d} ns] SPDM: {direction_marker} ", end="")
 
     if not hide_mctp:
-        print(f"EID {mctp_parsed['src_eid']:02X}→{mctp_parsed['dest_eid']:02X} ", end='')
-        if 'fragment_count' in mctp_parsed and mctp_parsed['fragment_count'] > 1:
-            print(f"[{mctp_parsed['fragment_count']} frags] ", end='')
+        print(
+            f"EID {mctp_parsed['src_eid']:02X}→{mctp_parsed['dest_eid']:02X} ", end=""
+        )
+        if "fragment_count" in mctp_parsed and mctp_parsed["fragment_count"] > 1:
+            print(f"[{mctp_parsed['fragment_count']} frags] ", end="")
 
-    print(f"v{spdm['version']} {spdm['msg_name']} ", end='')
+    print(f"v{spdm['version']} {spdm['msg_name']} ", end="")
 
-    if 'param1' in spdm:
-        print(f"P1=0x{spdm['param1']:02X} ", end='')
-    if 'param2' in spdm:
-        print(f"P2=0x{spdm['param2']:02X} ", end='')
+    if "param1" in spdm:
+        print(f"P1=0x{spdm['param1']:02X} ", end="")
+    if "param2" in spdm:
+        print(f"P2=0x{spdm['param2']:02X} ", end="")
 
-    if spdm.get('data_len', 0) > 0:
-        print(f"+{spdm['data_len']}B", end='')
+    if spdm.get("data_len", 0) > 0:
+        print(f"+{spdm['data_len']}B", end="")
 
     print()
 
 
-#==========================================================================
+# ==========================================================================
 # MAIN
-#==========================================================================
+# ==========================================================================
+
 
 def main():
     """Main entry point."""
     parser = argparse.ArgumentParser(
-        description='I2C/SMBus Monitor with MCTP/SPDM Support',
+        description="I2C/SMBus Monitor with MCTP/SPDM Support",
         formatter_class=argparse.RawDescriptionHelpFormatter,
-        epilog='''
+        epilog="""
 Examples:
   %(prog)s                                    # Raw I2C monitoring
   %(prog)s --smbus --with-pec                 # SMBus with PEC validation
@@ -719,32 +760,62 @@
   %(prog)s --spdm --mctp-hide                 # SPDM only (hide MCTP layer)
   %(prog)s --spdm --smbus-hide --mctp-hide    # SPDM only (minimal output)
   %(prog)s --samplerate 5000 --timeout 1000   # Custom sample rate and timeout
-        '''
+        """,
     )
 
     # Protocol mode arguments
-    parser.add_argument('--smbus', action='store_true',
-                        help='Treat all packets as having SMBus header')
-    parser.add_argument('--smbus-hide', action='store_true',
-                        help='Hide non-MCTP SMBus traffic (requires --smbus or higher)')
-    parser.add_argument('--with-pec', action='store_true',
-                        help='Assume PEC is present (requires --smbus)')
-    parser.add_argument('--mctp', action='store_true',
-                        help='MCTP mode (implies --smbus --with-pec)')
-    parser.add_argument('--mctp-no-partial', action='store_true',
-                        help='Hide MCTP fragments until EOM (requires --mctp or --spdm)')
-    parser.add_argument('--spdm', action='store_true',
-                        help='SPDM mode (implies --mctp)')
-    parser.add_argument('--mctp-hide', action='store_true',
-                        help='Hide MCTP layer details (requires --spdm)')
+    parser.add_argument(
+        "--smbus", action="store_true", help="Treat all packets as having SMBus header"
+    )
+    parser.add_argument(
+        "--smbus-hide",
+        action="store_true",
+        help="Hide non-MCTP SMBus traffic (requires --smbus or higher)",
+    )
+    parser.add_argument(
+        "--with-pec",
+        action="store_true",
+        help="Assume PEC is present (requires --smbus)",
+    )
+    parser.add_argument(
+        "--mctp", action="store_true", help="MCTP mode (implies --smbus --with-pec)"
+    )
+    parser.add_argument(
+        "--mctp-no-partial",
+        action="store_true",
+        help="Hide MCTP fragments until EOM (requires --mctp or --spdm)",
+    )
+    parser.add_argument(
+        "--spdm", action="store_true", help="SPDM mode (implies --mctp)"
+    )
+    parser.add_argument(
+        "--mctp-hide",
+        action="store_true",
+        help="Hide MCTP layer details (requires --spdm)",
+    )
 
     # Device configuration arguments
-    parser.add_argument('--samplerate', type=int, default=10000, metavar='KHZ',
-                        help='Sample rate in kHz (default: 10000)')
-    parser.add_argument('--timeout', type=int, default=500, metavar='MS',
-                        help='Idle timeout in milliseconds (default: 500)')
-    parser.add_argument('--latency', type=int, default=200, metavar='MS',
-                        help='Latency in milliseconds (default: 200)')
+    parser.add_argument(
+        "--samplerate",
+        type=int,
+        default=10000,
+        metavar="KHZ",
+        help="Sample rate in kHz (default: 10000)",
+    )
+    parser.add_argument(
+        "--timeout",
+        type=int,
+        default=500,
+        metavar="MS",
+        help="Idle timeout in milliseconds (default: 500)",
+    )
+    parser.add_argument(
+        "--latency",
+        type=int,
+        default=200,
+        metavar="MS",
+        help="Latency in milliseconds (default: 200)",
+    )
 
     args = parser.parse_args()
 
@@ -768,7 +839,9 @@
         parser.error("--mctp-hide requires --spdm")
 
     if args.smbus_hide and not args.smbus:
-        parser.error("--smbus-hide requires --smbus (or --mctp/--spdm which imply --smbus)")
+        parser.error(
+            "--smbus-hide requires --smbus (or --mctp/--spdm which imply --smbus)"
+        )
 
     # Validate configuration arguments
     if args.samplerate <= 0:
diff --git a/target/ast10x0/harness/i2c_requester.py b/target/ast10x0/harness/i2c_requester.py
index 7386910..ff57662 100755
--- a/target/ast10x0/harness/i2c_requester.py
+++ b/target/ast10x0/harness/i2c_requester.py
@@ -1,4 +1,6 @@
 #!/usr/bin/env python3
+# Licensed under the Apache-2.0 license
+# SPDX-License-Identifier: Apache-2.0
 """
 Aardvark I2C Multi-Controller Transceiver
 Sends pre-fabricated I2C payloads as controller and receives responses as target.
@@ -14,14 +16,17 @@
 # Add the Aardvark API to the path
 # Assumes script runs at the same level as aardvark-api-linux-x86_64-v6.00 directory
 script_dir = os.path.dirname(os.path.abspath(__file__))
-aardvark_lib_path = os.path.join(script_dir, 'aardvark-api-linux-x86_64-v6.00', 'python')
+aardvark_lib_path = os.path.join(
+    script_dir, "aardvark-api-linux-x86_64-v6.00", "python"
+)
 sys.path.insert(0, aardvark_lib_path)
 from aardvark_py import *
 
 
-#==========================================================================
+# ==========================================================================
 # DEVICE MANAGEMENT
-#==========================================================================
+# ==========================================================================
+
 
 def find_and_connect():
     """Find and connect to the first available Aardvark device."""
@@ -44,7 +49,9 @@
 
         if not (port & AA_PORT_NOT_FREE):
             device_port = port
-            print(f"Connecting to device on port {port} (S/N: {unique_id:04d}-{unique_id % 1000000:06d})")
+            print(
+                f"Connecting to device on port {port} (S/N: {unique_id:04d}-{unique_id % 1000000:06d})"
+            )
             break
         else:
             print(f"Port {port & ~AA_PORT_NOT_FREE} is in use")
@@ -111,9 +118,10 @@
     print("  Target:     Can receive from other controllers\n")
 
 
-#==========================================================================
+# ==========================================================================
 # I2C OPERATIONS
-#==========================================================================
+# ==========================================================================
+
 
 def send_payload(handle, remote_addr, payload: List[int], description=""):
     """
@@ -136,7 +144,7 @@
     print(f"    Data:   {' '.join(f'{b:02X}' for b in payload)}")
 
     # Convert to array
-    data_out = array('B', payload)
+    data_out = array("B", payload)
 
     # Write to remote device
     num_written = aa_i2c_write(handle, remote_addr, AA_I2C_NO_FLAGS, data_out)
@@ -234,7 +242,7 @@
         handle: Aardvark device handle
         response_data: List of bytes to respond with
     """
-    data_array = array('B', response_data)
+    data_array = array("B", response_data)
     result = aa_i2c_slave_set_response(handle, data_array)
     if result < 0:
         print(f"Error setting response: {aa_status_string(result)}")
@@ -242,12 +250,19 @@
         print(f"Response buffer set ({len(response_data)} bytes)")
 
 
-#==========================================================================
+# ==========================================================================
 # TRANSACTION SEQUENCES
-#==========================================================================
+# ==========================================================================
 
-def execute_transaction(handle, remote_addr, payload, wait_response=True,
-                        response_timeout=1000, description=""):
+
+def execute_transaction(
+    handle,
+    remote_addr,
+    payload,
+    wait_response=True,
+    response_timeout=1000,
+    description="",
+):
     """
     Execute a complete transaction: send payload and optionally wait for response.
 
@@ -285,16 +300,17 @@
     return success, response_data
 
 
-#==========================================================================
+# ==========================================================================
 # MAIN
-#==========================================================================
+# ==========================================================================
+
 
 def main():
     """Main entry point."""
     parser = argparse.ArgumentParser(
-        description='Aardvark I2C Multi-Controller Transceiver',
+        description="Aardvark I2C Multi-Controller Transceiver",
         formatter_class=argparse.RawDescriptionHelpFormatter,
-        epilog='''
+        epilog="""
 This tool operates in multi-controller mode:
   - Sends payloads as I2C controller to remote devices
   - Receives responses as I2C target from other controllers
@@ -304,27 +320,68 @@
   - Remote I2C address: 0x13
   - Bus speed: 100 kHz
   - Bus timeout: 150 ms
-        '''
+        """,
     )
 
-    parser.add_argument('--own-addr', type=lambda x: int(x, 0), default=0x10,
-                        metavar='ADDR', help='Our I2C address (default: 0x10)')
-    parser.add_argument('--own-eid', type=lambda x: int(x, 0), default=0x08,
-                        metavar='EID', help='Our MCTP endpoint ID (default: 0x08)')
-    parser.add_argument('--remote-addr', type=lambda x: int(x, 0), default=0x13,
-                        metavar='ADDR', help='Remote device address (default: 0x13)')
-    parser.add_argument('--remote-eid', type=lambda x: int(x, 0), default=0x42,
-                        metavar='EID', help='Remote MCTP endpoint ID (default: 0x42)')
-    parser.add_argument('--bitrate', type=int, default=100, metavar='KHZ',
-                        help='I2C bus speed in kHz (default: 100)')
-    parser.add_argument('--bus-timeout', type=int, default=150, metavar='MS',
-                        help='Bus lock timeout in ms (default: 150)')
-    parser.add_argument('--response-timeout', type=int, default=1000, metavar='MS',
-                        help='Response timeout in ms (default: 1000)')
-    parser.add_argument('--no-wait-response', action='store_true',
-                        help='Do not wait for response after sending')
-    parser.add_argument('--interactive', action='store_true',
-                        help='Interactive mode - prompt between transactions')
+    parser.add_argument(
+        "--own-addr",
+        type=lambda x: int(x, 0),
+        default=0x10,
+        metavar="ADDR",
+        help="Our I2C address (default: 0x10)",
+    )
+    parser.add_argument(
+        "--own-eid",
+        type=lambda x: int(x, 0),
+        default=0x08,
+        metavar="EID",
+        help="Our MCTP endpoint ID (default: 0x08)",
+    )
+    parser.add_argument(
+        "--remote-addr",
+        type=lambda x: int(x, 0),
+        default=0x13,
+        metavar="ADDR",
+        help="Remote device address (default: 0x13)",
+    )
+    parser.add_argument(
+        "--remote-eid",
+        type=lambda x: int(x, 0),
+        default=0x42,
+        metavar="EID",
+        help="Remote MCTP endpoint ID (default: 0x42)",
+    )
+    parser.add_argument(
+        "--bitrate",
+        type=int,
+        default=100,
+        metavar="KHZ",
+        help="I2C bus speed in kHz (default: 100)",
+    )
+    parser.add_argument(
+        "--bus-timeout",
+        type=int,
+        default=150,
+        metavar="MS",
+        help="Bus lock timeout in ms (default: 150)",
+    )
+    parser.add_argument(
+        "--response-timeout",
+        type=int,
+        default=1000,
+        metavar="MS",
+        help="Response timeout in ms (default: 1000)",
+    )
+    parser.add_argument(
+        "--no-wait-response",
+        action="store_true",
+        help="Do not wait for response after sending",
+    )
+    parser.add_argument(
+        "--interactive",
+        action="store_true",
+        help="Interactive mode - prompt between transactions",
+    )
 
     args = parser.parse_args()
 
@@ -350,18 +407,18 @@
 
         # Build the frame (without I2C destination address prefix)
         frame = [
-            0x0F,                    # Command code (MCTP)
-            0x0A,                    # Byte count (10 bytes)
-            src_i2c_with_read,       # Source I2C address with read bit
-            0x01,                    # MCTP version
-            args.remote_eid,         # Destination EID (responder)
-            args.own_eid,            # Source EID (us)
-            0xC8,                    # Flags (SOM=1, EOM=1, Seq=0, TO=1, Tag=0)
-            0x05,                    # Message type (SPDM)
-            0x10,                    # SPDM GET_VERSION
-            0x84,                    # SPDM request code
-            0x00,                    # Param1
-            0x00,                    # Param2
+            0x0F,  # Command code (MCTP)
+            0x0A,  # Byte count (10 bytes)
+            src_i2c_with_read,  # Source I2C address with read bit
+            0x01,  # MCTP version
+            args.remote_eid,  # Destination EID (responder)
+            args.own_eid,  # Source EID (us)
+            0xC8,  # Flags (SOM=1, EOM=1, Seq=0, TO=1, Tag=0)
+            0x05,  # Message type (SPDM)
+            0x10,  # SPDM GET_VERSION
+            0x84,  # SPDM request code
+            0x00,  # Param1
+            0x00,  # Param2
         ]
 
         # Calculate PEC (includes destination I2C address)
@@ -383,7 +440,9 @@
         frame.append(crc)  # Append PEC to payload
 
         print(f"Generated GET_VERSION payload:")
-        print(f"  Source I2C:    0x{args.own_addr:02X} (frame: 0x{src_i2c_with_read:02X})")
+        print(
+            f"  Source I2C:    0x{args.own_addr:02X} (frame: 0x{src_i2c_with_read:02X})"
+        )
         print(f"  Source EID:    0x{args.own_eid:02X}")
         print(f"  Dest I2C:      0x{args.remote_addr:02X}")
         print(f"  Dest EID:      0x{args.remote_eid:02X}")
@@ -393,9 +452,9 @@
         # Define pre-fabricated payloads
         payloads = [
             {
-                'name': 'MCTP SPDM GET_VERSION',
-                'data': frame,
-                'description': 'MCTP over SMBus: SPDM GET_VERSION request'
+                "name": "MCTP SPDM GET_VERSION",
+                "data": frame,
+                "description": "MCTP over SMBus: SPDM GET_VERSION request",
             },
             # Add more payloads here as needed
         ]
@@ -408,10 +467,10 @@
             execute_transaction(
                 handle,
                 args.remote_addr,
-                payload_info['data'],
+                payload_info["data"],
                 wait_response=not args.no_wait_response,
                 response_timeout=args.response_timeout,
-                description=payload_info['name']
+                description=payload_info["name"],
             )
 
         print("All transactions complete.")
diff --git a/target/ast10x0/harness/i2c_responder.py b/target/ast10x0/harness/i2c_responder.py
index 70b3f84..1c2d1dd 100755
--- a/target/ast10x0/harness/i2c_responder.py
+++ b/target/ast10x0/harness/i2c_responder.py
@@ -1,4 +1,6 @@
 #!/usr/bin/env python3
+# Licensed under the Apache-2.0 license
+# SPDX-License-Identifier: Apache-2.0
 """
 Aardvark I2C Responder
 Listens for I2C requests and returns a canned response.
@@ -12,14 +14,17 @@
 # Add the Aardvark API to the path
 # Assumes script runs at the same level as aardvark-api-linux-x86_64-v6.00 directory
 script_dir = os.path.dirname(os.path.abspath(__file__))
-aardvark_lib_path = os.path.join(script_dir, 'aardvark-api-linux-x86_64-v6.00', 'python')
+aardvark_lib_path = os.path.join(
+    script_dir, "aardvark-api-linux-x86_64-v6.00", "python"
+)
 sys.path.insert(0, aardvark_lib_path)
 from aardvark_py import *
 
 
-#==========================================================================
+# ==========================================================================
 # DEVICE MANAGEMENT
-#==========================================================================
+# ==========================================================================
+
 
 def find_and_connect():
     """Find and connect to the first available Aardvark device."""
@@ -42,7 +47,9 @@
 
         if not (port & AA_PORT_NOT_FREE):
             device_port = port
-            print(f"Connecting to device on port {port} (S/N: {unique_id:04d}-{unique_id % 1000000:06d})")
+            print(
+                f"Connecting to device on port {port} (S/N: {unique_id:04d}-{unique_id % 1000000:06d})"
+            )
             break
         else:
             print(f"Port {port & ~AA_PORT_NOT_FREE} is in use")
@@ -116,7 +123,7 @@
         handle: Aardvark device handle
         response_data: List of bytes to respond with
     """
-    data_array = array('B', response_data)
+    data_array = array("B", response_data)
     result = aa_i2c_slave_set_response(handle, data_array)
     if result < 0:
         print(f"Error setting response: {aa_status_string(result)}")
@@ -126,11 +133,20 @@
     print(f"  Data: {' '.join(f'{b:02X}' for b in response_data)}")
 
 
-#==========================================================================
+# ==========================================================================
 # I2C OPERATIONS
-#==========================================================================
+# ==========================================================================
 
-def listen_for_requests(handle, own_addr, remote_addr, response_data, timeout_ms=500, max_buffer=256, transaction_count=0):
+
+def listen_for_requests(
+    handle,
+    own_addr,
+    remote_addr,
+    response_data,
+    timeout_ms=500,
+    max_buffer=256,
+    transaction_count=0,
+):
     """
     Listen for incoming I2C requests and handle them.
     Uses MCTP multi-controller behavior: receive, then respond.
@@ -189,6 +205,7 @@
 
                 # Delay before responding
                 import time
+
                 print(f"    Waiting 1 second before responding...")
                 time.sleep(1.0)
                 print()
@@ -201,31 +218,44 @@
                 result = aa_i2c_slave_disable(handle)
                 print(f"    aa_i2c_slave_disable returned: {result}")
                 if result < 0:
-                    print(f"    ERROR disabling target mode: {aa_status_string(result)}")
+                    print(
+                        f"    ERROR disabling target mode: {aa_status_string(result)}"
+                    )
                     continue
                 print(f"    Target mode disabled successfully")
 
                 # Add delay to allow remote to switch to target mode
                 # and bus to settle after the request transaction
                 import time
-                print(f"    Waiting for bus to settle and remote to switch to target mode...")
+
+                print(
+                    f"    Waiting for bus to settle and remote to switch to target mode..."
+                )
                 time.sleep(0.05)  # 50ms delay
 
                 # Write response as controller to the remote address
-                response_array = array('B', response_data)
-                print(f"    Preparing to write {len(response_data)} bytes to 0x{remote_addr:02X}")
+                response_array = array("B", response_data)
+                print(
+                    f"    Preparing to write {len(response_data)} bytes to 0x{remote_addr:02X}"
+                )
                 print(f"    Data: {' '.join(f'{b:02X}' for b in response_data)}")
 
-                num_written = aa_i2c_write(handle, remote_addr, AA_I2C_NO_FLAGS, response_array)
+                num_written = aa_i2c_write(
+                    handle, remote_addr, AA_I2C_NO_FLAGS, response_array
+                )
 
                 print(f"    aa_i2c_write returned: {num_written}")
                 if num_written < 0:
-                    print(f"    ERROR writing response: {aa_status_string(num_written)}")
+                    print(
+                        f"    ERROR writing response: {aa_status_string(num_written)}"
+                    )
                     print(f"    Error code: {num_written}")
                 elif num_written == 0:
                     print(f"    WARNING: 0 bytes written!")
                 else:
-                    print(f"    SUCCESS: Wrote {num_written} bytes to 0x{remote_addr:02X}")
+                    print(
+                        f"    SUCCESS: Wrote {num_written} bytes to 0x{remote_addr:02X}"
+                    )
                 print()
 
                 # Re-enable target mode
@@ -233,10 +263,14 @@
                 result = aa_i2c_slave_enable(handle, own_addr, 0, 0)
                 print(f"    aa_i2c_slave_enable returned: {result}")
                 if result < 0:
-                    print(f"    ERROR re-enabling target mode: {aa_status_string(result)}")
+                    print(
+                        f"    ERROR re-enabling target mode: {aa_status_string(result)}"
+                    )
                     break
 
-                print(f">>> Switched back to target mode (listening on 0x{own_addr:02X})")
+                print(
+                    f">>> Switched back to target mode (listening on 0x{own_addr:02X})"
+                )
                 print()
 
                 trans_num += 1
@@ -256,16 +290,17 @@
     return trans_num
 
 
-#==========================================================================
+# ==========================================================================
 # MAIN
-#==========================================================================
+# ==========================================================================
+
 
 def main():
     """Main entry point."""
     parser = argparse.ArgumentParser(
-        description='Aardvark I2C Responder',
+        description="Aardvark I2C Responder",
         formatter_class=argparse.RawDescriptionHelpFormatter,
-        epilog='''
+        epilog="""
 This tool operates with MCTP multi-controller behavior:
   - Listens as I2C target for incoming write requests
   - Switches to I2C controller to actively send response back to requester
@@ -279,27 +314,72 @@
 
 Default canned response (MCTP SPDM VERSION response):
   26 0F 0A 21 01 42 08 D9 05 10 84 00 00 51
-        '''
+        """,
     )
 
-    parser.add_argument('--own-addr', type=lambda x: int(x, 0), default=0x13,
-                        metavar='ADDR', help='Our I2C address (default: 0x13)')
-    parser.add_argument('--remote-addr', type=lambda x: int(x, 0), default=0x10,
-                        metavar='ADDR', help='Remote I2C address to respond to (default: 0x10)')
-    parser.add_argument('--own-eid', type=lambda x: int(x, 0), default=0x42,
-                        metavar='EID', help='Our MCTP endpoint ID (default: 0x42)')
-    parser.add_argument('--remote-eid', type=lambda x: int(x, 0), default=0x08,
-                        metavar='EID', help='Remote MCTP endpoint ID (default: 0x08)')
-    parser.add_argument('--bitrate', type=int, default=100, metavar='KHZ',
-                        help='I2C bus speed in kHz (default: 100)')
-    parser.add_argument('--bus-timeout', type=int, default=150, metavar='MS',
-                        help='Bus lock timeout in ms (default: 150)')
-    parser.add_argument('--poll-timeout', type=int, default=500, metavar='MS',
-                        help='Poll timeout in ms (default: 500)')
-    parser.add_argument('--count', type=int, default=0, metavar='N',
-                        help='Number of transactions to handle (0=infinite, default: 0)')
-    parser.add_argument('--response', type=str, default=None, metavar='HEX',
-                        help='Custom response as hex string (e.g., "01 02 03")')
+    parser.add_argument(
+        "--own-addr",
+        type=lambda x: int(x, 0),
+        default=0x13,
+        metavar="ADDR",
+        help="Our I2C address (default: 0x13)",
+    )
+    parser.add_argument(
+        "--remote-addr",
+        type=lambda x: int(x, 0),
+        default=0x10,
+        metavar="ADDR",
+        help="Remote I2C address to respond to (default: 0x10)",
+    )
+    parser.add_argument(
+        "--own-eid",
+        type=lambda x: int(x, 0),
+        default=0x42,
+        metavar="EID",
+        help="Our MCTP endpoint ID (default: 0x42)",
+    )
+    parser.add_argument(
+        "--remote-eid",
+        type=lambda x: int(x, 0),
+        default=0x08,
+        metavar="EID",
+        help="Remote MCTP endpoint ID (default: 0x08)",
+    )
+    parser.add_argument(
+        "--bitrate",
+        type=int,
+        default=100,
+        metavar="KHZ",
+        help="I2C bus speed in kHz (default: 100)",
+    )
+    parser.add_argument(
+        "--bus-timeout",
+        type=int,
+        default=150,
+        metavar="MS",
+        help="Bus lock timeout in ms (default: 150)",
+    )
+    parser.add_argument(
+        "--poll-timeout",
+        type=int,
+        default=500,
+        metavar="MS",
+        help="Poll timeout in ms (default: 500)",
+    )
+    parser.add_argument(
+        "--count",
+        type=int,
+        default=0,
+        metavar="N",
+        help="Number of transactions to handle (0=infinite, default: 0)",
+    )
+    parser.add_argument(
+        "--response",
+        type=str,
+        default=None,
+        metavar="HEX",
+        help='Custom response as hex string (e.g., "01 02 03")',
+    )
 
     args = parser.parse_args()
 
@@ -325,15 +405,31 @@
     #   0x13, 0x00 = SPDM version 1.3
     # PEC=0x6F calculated over full frame including I2C dest
     canned_response = [
-        0x0F, 0x10, 0x27, 0x01, 0x08, 0x42, 0xD1, 0x05,
-        0x10, 0x04, 0x00, 0x00, 0x02, 0x00, 0x12, 0x00,
-        0x13, 0x00, 0x6F,
+        0x0F,
+        0x10,
+        0x27,
+        0x01,
+        0x08,
+        0x42,
+        0xD1,
+        0x05,
+        0x10,
+        0x04,
+        0x00,
+        0x00,
+        0x02,
+        0x00,
+        0x12,
+        0x00,
+        0x13,
+        0x00,
+        0x6F,
     ]
 
     # Parse custom response if provided
     if args.response:
         try:
-            hex_bytes = args.response.replace(',', ' ').split()
+            hex_bytes = args.response.replace(",", " ").split()
             canned_response = [int(b, 16) for b in hex_bytes if b.strip()]
             print(f"Using custom response ({len(canned_response)} bytes)")
         except ValueError as e:
@@ -367,7 +463,7 @@
             args.remote_addr,
             canned_response,
             args.poll_timeout,
-            transaction_count=args.count
+            transaction_count=args.count,
         )
 
         print(f"\nTotal transactions handled: {num_transactions}")
diff --git a/target/ast10x0/harness/pi_test_runner.py b/target/ast10x0/harness/pi_test_runner.py
index 8f96bfc..51d8d22 100644
--- a/target/ast10x0/harness/pi_test_runner.py
+++ b/target/ast10x0/harness/pi_test_runner.py
@@ -19,7 +19,10 @@
 try:
     import serial
 except ImportError:
-    print("Error: pyserial not installed. Install with: pip install pyserial", file=sys.stderr)
+    print(
+        "Error: pyserial not installed. Install with: pip install pyserial",
+        file=sys.stderr,
+    )
     sys.exit(1)
 
 
@@ -27,7 +30,9 @@
     subprocess.run(["pinctrl", "set", str(pin), "op"] + state.split(), check=True)
 
 
-def _sequence_to_fwspick_mode(srst_pin: int, fwspick_pin: int, port: serial.Serial) -> None:
+def _sequence_to_fwspick_mode(
+    srst_pin: int, fwspick_pin: int, port: serial.Serial
+) -> None:
     _gpio_set(srst_pin, "dl")
     time.sleep(0.1)
     port.timeout = 0.1
diff --git a/target/ast10x0/harness/qemu_runner.py b/target/ast10x0/harness/qemu_runner.py
index 70fe998..10fe61c 100644
--- a/target/ast10x0/harness/qemu_runner.py
+++ b/target/ast10x0/harness/qemu_runner.py
@@ -49,10 +49,12 @@
         description=__doc__,
         formatter_class=argparse.RawDescriptionHelpFormatter,
     )
-    parser.add_argument('--machine', type=str, help='qemu machine type')
-    parser.add_argument('--cpu', type=str, help='qemu cpu type')
-    parser.add_argument('--image', type=str, help='image file to run')
-    parser.add_argument('--qemu-args', nargs='*', help='Extra arguments to pass to qemu')
+    parser.add_argument("--machine", type=str, help="qemu machine type")
+    parser.add_argument("--cpu", type=str, help="qemu cpu type")
+    parser.add_argument("--image", type=str, help="image file to run")
+    parser.add_argument(
+        "--qemu-args", nargs="*", help="Extra arguments to pass to qemu"
+    )
     return parser.parse_args()
 
 
@@ -60,14 +62,14 @@
     try:
         detokenizer = detokenize.Detokenizer(image)
         line_buffer = ""
-        with open(tokenized_file, 'r', buffering=1) as f:
+        with open(tokenized_file, "r", buffering=1) as f:
             while not qemu_finished.is_set():
                 try:
                     chunk = f.readline()
                     if chunk:
                         line_buffer += chunk
-                        while '\n' in line_buffer:
-                            newline_pos = line_buffer.find('\n') + 1
+                        while "\n" in line_buffer:
+                            newline_pos = line_buffer.find("\n") + 1
                             complete_line = line_buffer[:newline_pos]
                             detokenizer.detokenize_text_to_file(
                                 complete_line, sys.stdout.buffer
@@ -91,7 +93,7 @@
 ):
     buf = b""
     try:
-        with open(tokenized_file, 'rb') as f:
+        with open(tokenized_file, "rb") as f:
             while not qemu_finished.is_set():
                 chunk = f.read(256)
                 if chunk:
@@ -113,13 +115,19 @@
 def _main(args) -> None:
     qemu_args = [
         _QEMU_ARM,
-        "-machine", args.machine,
-        "-cpu", args.cpu,
-        "-bios", "none",
+        "-machine",
+        args.machine,
+        "-cpu",
+        args.cpu,
+        "-bios",
+        "none",
         "-nographic",
-        "-serial", "mon:stdio",
-        "-semihosting-config", "enable=on,target=native",
-        "-kernel", args.image,
+        "-serial",
+        "mon:stdio",
+        "-semihosting-config",
+        "enable=on,target=native",
+        "-kernel",
+        args.image,
     ]
 
     if args.qemu_args:
@@ -170,5 +178,5 @@
     sys.exit(result[0])
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     _main(_parse_args())
diff --git a/target/ast10x0/harness/test_runner.py b/target/ast10x0/harness/test_runner.py
index fb359b6..55c0e2d 100644
--- a/target/ast10x0/harness/test_runner.py
+++ b/target/ast10x0/harness/test_runner.py
@@ -30,6 +30,7 @@
 # When run as a Bazel py_binary, pw_tokenizer is already on sys.path via deps.
 # When run outside Bazel, try PW_TOK_ROOT or the Bazel output base as fallbacks.
 
+
 def _extend_path_for_pw_tokenizer() -> None:
     pw_tok_root = os.environ.get("PW_TOK_ROOT")
     if pw_tok_root:
@@ -39,7 +40,9 @@
         output_base = subprocess.check_output(
             ["bazel", "info", "output_base"], text=True, stderr=subprocess.DEVNULL
         ).strip()
-        candidate = os.path.join(output_base, "external", "pigweed+", "pw_tokenizer", "py")
+        candidate = os.path.join(
+            output_base, "external", "pigweed+", "pw_tokenizer", "py"
+        )
         if os.path.isdir(candidate):
             sys.path.insert(0, candidate)
     except (subprocess.CalledProcessError, FileNotFoundError):
@@ -51,6 +54,7 @@
 try:
     from pw_tokenizer import Detokenizer
     from pw_tokenizer.detokenize import NestedMessageParser
+
     _PW_TOKENIZER_AVAILABLE = True
 except ImportError:
     _PW_TOKENIZER_AVAILABLE = False
@@ -62,13 +66,14 @@
 # thread so the stale-lock detector knows we're still alive.
 
 _LOCK_PATH = "/tmp/ast1060_evb.lock"
-_LOCK_TOUCH_INTERVAL = 10       # seconds between lock touches
-_LOCK_STALE_THRESHOLD = 60      # seconds since last touch → lock is stale
-_LOCK_ACQUIRE_TIMEOUT = 120     # seconds to wait before giving up
+_LOCK_TOUCH_INTERVAL = 10  # seconds between lock touches
+_LOCK_STALE_THRESHOLD = 60  # seconds since last touch → lock is stale
+_LOCK_ACQUIRE_TIMEOUT = 120  # seconds to wait before giving up
 
 
 # ── SSH helpers ───────────────────────────────────────────────────────────────
 
+
 def _ssh(host: str, cmd: str, **kwargs) -> subprocess.CompletedProcess:
     """Run a single SSH command synchronously."""
     return subprocess.run(
@@ -191,6 +196,7 @@
 
 # ── Local execution ───────────────────────────────────────────────────────────
 
+
 def _run_local(
     args: argparse.Namespace,
     config: dict,
@@ -209,6 +215,7 @@
 
 # ── Remote execution ──────────────────────────────────────────────────────────
 
+
 def _run_remote(
     args: argparse.Namespace,
     config: dict,
@@ -282,6 +289,7 @@
 
 # ── Entry point ───────────────────────────────────────────────────────────────
 
+
 def main() -> int:
     with (Path(__file__).parent / "evb_config.toml").open("rb") as f:
         config = tomllib.load(f)
@@ -319,7 +327,8 @@
         help="Write detokenized UART output to this file",
     )
     parser.add_argument(
-        "-q", "--quiet",
+        "-q",
+        "--quiet",
         action="store_true",
         help="Suppress diagnostic messages to stderr",
     )
diff --git a/target/ast10x0/harness/uart_test_exec.py b/target/ast10x0/harness/uart_test_exec.py
index fb759e9..df40309 100644
--- a/target/ast10x0/harness/uart_test_exec.py
+++ b/target/ast10x0/harness/uart_test_exec.py
@@ -1,5 +1,6 @@
 #!/usr/bin/env python3
 # Licensed under the Apache-2.0 license
+# SPDX-License-Identifier: Apache-2.0
 """
 AST1060 UART Test Execution Script
 
@@ -17,6 +18,7 @@
 from pathlib import Path
 from typing import Optional, Tuple
 
+
 def _find_pw_tokenizer() -> bool:
     """Attempt to locate and add pw_tokenizer to sys.path.
 
@@ -32,7 +34,9 @@
         output_base = subprocess.check_output(
             ["bazel", "info", "output_base"], text=True, stderr=subprocess.DEVNULL
         ).strip()
-        candidate = os.path.join(output_base, "external", "pigweed+", "pw_tokenizer", "py")
+        candidate = os.path.join(
+            output_base, "external", "pigweed+", "pw_tokenizer", "py"
+        )
         if os.path.isdir(candidate):
             sys.path.insert(0, candidate)
             return True
@@ -41,6 +45,7 @@
 
     return False
 
+
 _PW_TOKENIZER_AVAILABLE = _find_pw_tokenizer()
 
 if _PW_TOKENIZER_AVAILABLE:
@@ -63,10 +68,14 @@
     def __init__(self, args):
         self.args = args
         self.serial_port: Optional[serial.Serial] = None
-        self.log_file = getattr(args, "log_file", None) or f"uart-test-{os.getpid()}.log"
+        self.log_file = (
+            getattr(args, "log_file", None) or f"uart-test-{os.getpid()}.log"
+        )
         self.log_file_handle = None
         elf = getattr(args, "elf", None)
-        self.detokenizer = Detokenizer(elf) if (elf and _PW_TOKENIZER_AVAILABLE) else None
+        self.detokenizer = (
+            Detokenizer(elf) if (elf and _PW_TOKENIZER_AVAILABLE) else None
+        )
 
     def log(self, message: str):
         """Print message unless in quiet mode."""
@@ -460,7 +469,11 @@
 
     # UART settings
     parser.add_argument(
-        "-b", "--baudrate", type=int, default=115200, help="UART baud rate (default: 115200)"
+        "-b",
+        "--baudrate",
+        type=int,
+        default=115200,
+        help="UART baud rate (default: 115200)",
     )
     parser.add_argument(
         "--test-timeout",
@@ -480,7 +493,9 @@
         "-q", "--quiet", action="store_true", help="Run silently (no output)"
     )
     parser.add_argument(
-        "--dry-run", action="store_true", help="Show what would be done without executing"
+        "--dry-run",
+        action="store_true",
+        help="Show what would be done without executing",
     )
     parser.add_argument(
         "--upload-only",
diff --git a/target/ast10x0/tests/interrupts/user/BUILD.bazel b/target/ast10x0/tests/interrupts/user/BUILD.bazel
index 653e68c..e82051a 100644
--- a/target/ast10x0/tests/interrupts/user/BUILD.bazel
+++ b/target/ast10x0/tests/interrupts/user/BUILD.bazel
@@ -7,6 +7,7 @@
 load("@pigweed//pw_kernel/tooling/panic_detector:rust_binary_no_panics_test.bzl", "rust_binary_no_panics_test")
 load("@rules_rust//rust:defs.bzl", "rust_binary")
 load("//target/ast10x0:defs.bzl", "TARGET_COMPATIBLE_WITH")
+
 system_image(
     name = "interrupts",
     apps = [
diff --git a/target/ast10x0/tests/ipc/user/BUILD.bazel b/target/ast10x0/tests/ipc/user/BUILD.bazel
index 553dfde..767fd05 100644
--- a/target/ast10x0/tests/ipc/user/BUILD.bazel
+++ b/target/ast10x0/tests/ipc/user/BUILD.bazel
@@ -7,6 +7,7 @@
 load("@pigweed//pw_kernel/tooling/panic_detector:rust_binary_no_panics_test.bzl", "rust_binary_no_panics_test")
 load("@rules_rust//rust:defs.bzl", "rust_binary")
 load("//target/ast10x0:defs.bzl", "TARGET_COMPATIBLE_WITH")
+
 system_image(
     name = "ipc",
     apps = ["@pigweed//pw_kernel/tests/ipc/user:ipc"],
diff --git a/target/ast10x0/tests/threads/kernel/BUILD.bazel b/target/ast10x0/tests/threads/kernel/BUILD.bazel
index aad4c2c..17a9b20 100644
--- a/target/ast10x0/tests/threads/kernel/BUILD.bazel
+++ b/target/ast10x0/tests/threads/kernel/BUILD.bazel
@@ -6,6 +6,7 @@
 load("@pigweed//pw_kernel/tooling/panic_detector:rust_binary_no_panics_test.bzl", "rust_binary_no_panics_test")
 load("@rules_rust//rust:defs.bzl", "rust_binary")
 load("//target/ast10x0:defs.bzl", "TARGET_COMPATIBLE_WITH")
+
 system_image(
     name = "threads",
     kernel = ":target",
diff --git a/target/ast10x0/tests/usart/BUILD.bazel b/target/ast10x0/tests/usart/BUILD.bazel
index cac8839..8057997 100644
--- a/target/ast10x0/tests/usart/BUILD.bazel
+++ b/target/ast10x0/tests/usart/BUILD.bazel
@@ -8,6 +8,7 @@
 load("@pigweed//pw_kernel/tooling/panic_detector:rust_binary_no_panics_test.bzl", "rust_binary_no_panics_test")
 load("@rules_rust//rust:defs.bzl", "rust_binary")
 load("//target/ast10x0:defs.bzl", "TARGET_COMPATIBLE_WITH")
+
 filegroup(
     name = "system_config",
     srcs = ["system.json5"],
diff --git a/third_party/BUILD.bazel b/third_party/BUILD.bazel
index 4b60abf..c7749fd 100644
--- a/third_party/BUILD.bazel
+++ b/third_party/BUILD.bazel
@@ -1,4 +1,5 @@
 # Licensed under the Apache-2.0 license
+# SPDX-License-Identifier: Apache-2.0
 
 exports_files([
     "ast1060_pac.BUILD.bazel",
diff --git a/third_party/aspeed_ddk.BUILD.bazel b/third_party/aspeed_ddk.BUILD.bazel
deleted file mode 100644
index f798203..0000000
--- a/third_party/aspeed_ddk.BUILD.bazel
+++ /dev/null
@@ -1,33 +0,0 @@
-# Licensed under the Apache-2.0 license
-
-load("@rules_rust//rust:defs.bzl", "rust_library")
-
-rust_library(
-    name = "aspeed_ddk",
-    srcs = glob(["src/**/*.rs"]),
-    crate_root = "src/lib.rs",
-    edition = "2021",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    visibility = ["//visibility:public"],
-    deps = [
-        "@ast1060_pac//:ast1060_pac",
-        "@rust_crates//:bitflags",
-        "@rust_crates//:cortex-m",
-        "@rust_crates//:cortex-m-rt",
-        "@rust_crates//:embedded-hal",
-        "@rust_crates//:embedded-io",
-        "@rust_crates//:fugit",
-        "@rust_crates//:heapless",
-        "@rust_crates//:hex-literal",
-        "@rust_crates//:nb",
-        "@rust_crates//:openprot-hal-blocking",
-        "@rust_crates//:panic-halt",
-        "@rust_crates//:proposed-traits",
-        "@rust_crates//:zerocopy",
-    ],
-    proc_macro_deps = [
-        "@rust_crates//:paste",
-    ],
-)
diff --git a/third_party/aspeed_ddk.bzl b/third_party/aspeed_ddk.bzl
deleted file mode 100644
index 7a46bb4..0000000
--- a/third_party/aspeed_ddk.bzl
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed under the Apache-2.0 license
-
-"""Module extension to fetch the aspeed-ddk crate."""
-
-load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
-
-def _aspeed_ddk_impl(module_ctx):
-    git_repository(
-        name = "aspeed_ddk",
-        remote = "https://github.com/OpenPRoT/aspeed-rust.git",
-        build_file = "@@//third_party:aspeed_ddk.BUILD.bazel",
-    )
-    return module_ctx.extension_metadata(
-        reproducible = True,
-        root_module_direct_deps = ["aspeed_ddk"],
-        root_module_direct_dev_deps = [],
-    )
-
-aspeed_ddk_ext = module_extension(
-    implementation = _aspeed_ddk_impl,
-)
diff --git a/third_party/ast1060_pac.BUILD.bazel b/third_party/ast1060_pac.BUILD.bazel
index 0b5741a..0cc6f9f 100644
--- a/third_party/ast1060_pac.BUILD.bazel
+++ b/third_party/ast1060_pac.BUILD.bazel
@@ -1,4 +1,5 @@
 # Licensed under the Apache-2.0 license
+# SPDX-License-Identifier: Apache-2.0
 
 load("@rules_rust//rust:defs.bzl", "rust_library")
 
@@ -13,6 +14,6 @@
     visibility = ["//visibility:public"],
     deps = [
         "@rust_crates//:cortex-m",
-        "@vcell//:vcell",
+        "@vcell",
     ],
 )
diff --git a/third_party/ast1060_pac.bzl b/third_party/ast1060_pac.bzl
index 7606ebc..bf6dd83 100644
--- a/third_party/ast1060_pac.bzl
+++ b/third_party/ast1060_pac.bzl
@@ -1,4 +1,5 @@
 # Licensed under the Apache-2.0 license
+# SPDX-License-Identifier: Apache-2.0
 
 """Module extension to fetch the AST1060 PAC and its dependency vcell."""
 
diff --git a/third_party/crates_io/Cargo.lock b/third_party/crates_io/Cargo.lock
index f3162be..8f14999 100644
--- a/third_party/crates_io/Cargo.lock
+++ b/third_party/crates_io/Cargo.lock
@@ -118,17 +118,6 @@
 ]
 
 [[package]]
-name = "async-trait"
-version = "0.1.89"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.117",
-]
-
-[[package]]
 name = "autocfg"
 version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -501,12 +490,6 @@
 ]
 
 [[package]]
-name = "embedded-storage"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a21dea9854beb860f3062d10228ce9b976da520a73474aed3171ec276bc0c032"
-
-[[package]]
 name = "equivalent"
 version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1130,18 +1113,6 @@
 ]
 
 [[package]]
-name = "proposed-traits"
-version = "0.1.0"
-source = "git+https://github.com/rusty1968/proposed_traits.git?rev=85641310df5a5276c67f81621b104322cff0286c#85641310df5a5276c67f81621b104322cff0286c"
-dependencies = [
- "async-trait",
- "embedded-hal 1.0.0",
- "embedded-io",
- "embedded-storage",
- "rand_core 0.6.4",
-]
-
-[[package]]
 name = "prost"
 version = "0.13.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1345,7 +1316,6 @@
  "panic-halt",
  "paste",
  "proc-macro2",
- "proposed-traits",
  "prost",
  "quote",
  "rand_core 0.9.5",
diff --git a/third_party/crates_io/Cargo.toml b/third_party/crates_io/Cargo.toml
index 104ba39..112ca9c 100644
--- a/third_party/crates_io/Cargo.toml
+++ b/third_party/crates_io/Cargo.toml
@@ -49,7 +49,6 @@
 nb = "1.1"
 fugit = "0.3.7"
 openprot-hal-blocking = { git = "https://github.com/rusty1968/openprot.git", rev = "c6cd23a" }
-proposed-traits = { git = "https://github.com/rusty1968/proposed_traits.git", package = "proposed-traits", rev = "85641310df5a5276c67f81621b104322cff0286c" }
 heapless = { version = "0.9", default-features = false }
 mctp = { git = "https://github.com/CodeConstruct/mctp-rs.git" }
 mctp-lib = { git = "https://github.com/OpenPRoT/mctp-lib.git", branch = "9e-buildup" }
diff --git a/third_party/vcell.BUILD.bazel b/third_party/vcell.BUILD.bazel
index c151735..04509ba 100644
--- a/third_party/vcell.BUILD.bazel
+++ b/third_party/vcell.BUILD.bazel
@@ -1,4 +1,5 @@
 # Licensed under the Apache-2.0 license
+# SPDX-License-Identifier: Apache-2.0
 
 load("@rules_rust//rust:defs.bzl", "rust_library")