From d50ac1294de5c2b2703ba0bb8ef8dc97a06e03e3 Mon Sep 17 00:00:00 2001 From: Kris Hicks Date: Wed, 29 Jul 2026 16:25:30 -0700 Subject: [PATCH] feat(vm): export driver traces over OTLP Continue distributed traces across the gateway-to-driver process boundary and export VM driver spans to the same OTLP/gRPC collector. The driver reports as the distinct openshell-driver-vm service. Updated the gateway architecture and configuration reference with a generic external-driver forwarding contract. Instrumented: - Every RemoteComputeDriver RPC injects the active W3C trace context into tonic metadata. Managed VM readiness and runtime initialization give startup capability probes stable parent operations rather than isolated root spans. - A tonic service layer creates fixed, low-cardinality server spans for every ComputeDriver RPC. New handlers inherit tracing automatically; failures record OpenTelemetry error status and the gRPC status code. - Background provisioning remains attached to CreateSandbox after the RPC returns without extending the RPC span lifetime. - Provisioning records image preparation, bootstrap image resolution, overlay preparation, lifecycle configuration, pre-launch hooks, guest preparation, and launcher spawn as child spans. - VM startup reconciliation roots one trace for the persisted-sandbox scan, with per-sandbox restore and provision operations beneath it. The root remains open until all spawned restore tasks finish. - Delete cleanup records its own child operation. Design notes: - The gateway forwards its configured OTLP endpoint to managed external drivers. SDK `OTEL_*` variables continue to own sampling, batching, limits, headers, and transport tuning. - The VM driver has its own tracer provider and service resource so trace backends preserve the service boundary. - RPC operation names come from an explicit method mapping, keeping cardinality bounded without parsing the protobuf descriptor set at runtime. - Propagation uses a remote SpanContext for spawned provisioning. This keeps one trace while allowing the CreateSandbox server span to finish when the RPC response is sent. - Startup restoration is independent of gateway requests. It begins at the VM driver reconciliation span rather than attaching to an unrelated RPC. - Existing tracing events remain on the logging path. The OpenTelemetry layer exports spans only and excludes the SDK exporter callsites to avoid recursive traces. - Export configuration failures do not prevent the driver from serving, and buffered spans are drained during graceful shutdown. - Trace fields identify drivers, sandboxes, images, lifecycle phases, and gRPC outcomes without recording credentials, sandbox tokens, or request query parameters. Refs #2507 Signed-off-by: Kris Hicks --- Cargo.lock | 11 + MODULE.bazel.lock | 139 ++-- architecture/gateway.md | 26 +- crates/openshell-driver-vm/Cargo.toml | 9 + crates/openshell-driver-vm/README.md | 2 +- crates/openshell-driver-vm/src/driver.rs | 781 +++++++++++++++++- crates/openshell-driver-vm/src/lib.rs | 1 + crates/openshell-driver-vm/src/lifecycle.rs | 24 +- crates/openshell-driver-vm/src/main.rs | 66 +- .../openshell-driver-vm/src/otel_tracing.rs | 267 ++++++ crates/openshell-otel/Cargo.toml | 2 + crates/openshell-otel/src/grpc.rs | 26 + crates/openshell-otel/src/lib.rs | 103 +++ crates/openshell-otel/src/propagation.rs | 99 +++ crates/openshell-server/Cargo.toml | 1 + crates/openshell-server/src/compute/mod.rs | 248 +++++- crates/openshell-server/src/compute/vm.rs | 89 +- crates/openshell-server/src/grpc/mod.rs | 12 +- crates/openshell-server/src/grpc/sandbox.rs | 69 +- crates/openshell-server/src/lib.rs | 5 +- crates/openshell-server/src/multiplex.rs | 17 +- crates/openshell-server/src/otel_tracing.rs | 27 +- .../openshell-server/src/persistence/tests.rs | 9 +- crates/openshell-server/src/test_support.rs | 32 +- docs/reference/gateway-config.mdx | 4 +- 25 files changed, 1869 insertions(+), 200 deletions(-) create mode 100644 crates/openshell-driver-vm/src/otel_tracing.rs create mode 100644 crates/openshell-otel/src/grpc.rs create mode 100644 crates/openshell-otel/src/propagation.rs diff --git a/Cargo.lock b/Cargo.lock index 528309a970..c03be7c032 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3968,14 +3968,19 @@ dependencies = [ "clap", "flate2", "futures", + "http 1.4.0", "libc", "libloading", "miette", "nix 0.29.0", "oci-client", "openshell-core", + "openshell-otel", "openshell-policy", "openshell-vfio", + "opentelemetry", + "opentelemetry-proto", + "opentelemetry_sdk", "polling", "prost", "prost-types", @@ -3985,10 +3990,13 @@ dependencies = [ "sha2 0.10.9", "tar", "temp-env", + "tempfile", "tokio", "tokio-stream", "tonic", + "tower-http 0.6.8", "tracing", + "tracing-opentelemetry", "tracing-subscriber", "url", "zstd", @@ -4037,6 +4045,8 @@ dependencies = [ "opentelemetry_sdk", "thiserror 2.0.18", "tokio", + "tonic", + "tower-http 0.6.8", "tracing", "tracing-opentelemetry", "tracing-subscriber", @@ -4185,6 +4195,7 @@ dependencies = [ "metrics", "metrics-exporter-prometheus", "miette", + "nix 0.29.0", "notify", "openshell-bootstrap", "openshell-core", diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index fc7a80684b..9276b10fb9 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -562,9 +562,10 @@ "@@rules_rs+//rs:extensions.bzl%crate": { "addr2line_0.25.1": "{\"dependencies\":[{\"name\":\"alloc\",\"optional\":true,\"package\":\"rustc-std-workspace-alloc\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"backtrace\",\"req\":\"^0.3.13\"},{\"features\":[\"wrap_help\"],\"name\":\"clap\",\"optional\":true,\"req\":\"^4.3.21\"},{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"cpp_demangle\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7.0\"},{\"default_features\":false,\"name\":\"fallible-iterator\",\"optional\":true,\"req\":\"^0.3.0\"},{\"kind\":\"dev\",\"name\":\"findshlibs\",\"req\":\"^0.10\"},{\"default_features\":false,\"features\":[\"read\"],\"name\":\"gimli\",\"req\":\"^0.32.0\"},{\"kind\":\"dev\",\"name\":\"libtest-mimic\",\"req\":\"^0.8.1\"},{\"name\":\"memmap2\",\"optional\":true,\"req\":\"^0.9.4\"},{\"default_features\":false,\"features\":[\"read\",\"compression\"],\"name\":\"object\",\"optional\":true,\"req\":\"^0.37.0\"},{\"name\":\"rustc-demangle\",\"optional\":true,\"req\":\"^0.1\"},{\"default_features\":false,\"name\":\"smallvec\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"typed-arena\",\"optional\":true,\"req\":\"^2\"}],\"features\":{\"all\":[\"bin\",\"wasm\"],\"bin\":[\"loader\",\"rustc-demangle\",\"cpp_demangle\",\"fallible-iterator\",\"smallvec\",\"dep:clap\"],\"cargo-all\":[],\"default\":[\"rustc-demangle\",\"cpp_demangle\",\"loader\",\"fallible-iterator\",\"smallvec\"],\"loader\":[\"std\",\"dep:object\",\"dep:memmap2\",\"dep:typed-arena\"],\"rustc-dep-of-std\":[\"core\",\"alloc\",\"gimli/rustc-dep-of-std\"],\"std\":[\"gimli/std\"],\"wasm\":[\"object/wasm\"]}}", "adler2_2.0.1": "{\"dependencies\":[{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"}],\"features\":{\"default\":[\"std\"],\"rustc-dep-of-std\":[\"core\"],\"std\":[]}}", - "aead_0.5.2": "{\"dependencies\":[{\"default_features\":false,\"name\":\"arrayvec\",\"optional\":true,\"req\":\"^0.7\"},{\"name\":\"blobby\",\"optional\":true,\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"bytes\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"crypto-common\",\"req\":\"^0.1.4\"},{\"default_features\":false,\"name\":\"generic-array\",\"req\":\"^0.14\"},{\"default_features\":false,\"name\":\"heapless\",\"optional\":true,\"req\":\"^0.7\"}],\"features\":{\"alloc\":[],\"default\":[\"rand_core\"],\"dev\":[\"blobby\"],\"getrandom\":[\"crypto-common/getrandom\",\"rand_core\"],\"rand_core\":[\"crypto-common/rand_core\"],\"std\":[\"alloc\",\"crypto-common/std\"],\"stream\":[]}}", - "aes-gcm_0.10.3": "{\"dependencies\":[{\"default_features\":false,\"name\":\"aead\",\"req\":\"^0.5\"},{\"default_features\":false,\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"aead\",\"req\":\"^0.5\"},{\"name\":\"aes\",\"optional\":true,\"req\":\"^0.8\"},{\"name\":\"cipher\",\"req\":\"^0.4\"},{\"name\":\"ctr\",\"req\":\"^0.9\"},{\"default_features\":false,\"name\":\"ghash\",\"req\":\"^0.5\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"aead/alloc\"],\"arrayvec\":[\"aead/arrayvec\"],\"default\":[\"aes\",\"alloc\",\"getrandom\"],\"getrandom\":[\"aead/getrandom\",\"rand_core\"],\"heapless\":[\"aead/heapless\"],\"rand_core\":[\"aead/rand_core\"],\"std\":[\"aead/std\",\"alloc\"],\"stream\":[\"aead/stream\"]}}", + "aead_0.6.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"arrayvec\",\"optional\":true,\"req\":\"^0.7\"},{\"name\":\"blobby\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"bytes\",\"optional\":true,\"req\":\"^1.11.1\"},{\"name\":\"common\",\"package\":\"crypto-common\",\"req\":\"^0.2\"},{\"name\":\"inout\",\"req\":\"^0.2.2\"}],\"features\":{\"alloc\":[],\"default\":[\"rand_core\"],\"dev\":[\"blobby\",\"alloc\"],\"getrandom\":[\"common/getrandom\",\"rand_core\"],\"rand_core\":[\"common/rand_core\"]}}", + "aes-gcm_0.11.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"aead\",\"req\":\"^0.6\"},{\"default_features\":false,\"features\":[\"alloc\",\"dev\"],\"kind\":\"dev\",\"name\":\"aead\",\"req\":\"^0.6\"},{\"name\":\"aes\",\"optional\":true,\"req\":\"^0.9\"},{\"name\":\"cipher\",\"req\":\"^0.5\"},{\"name\":\"ctr\",\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"ghash\",\"req\":\"^0.6\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"aead/alloc\"],\"arrayvec\":[\"aead/arrayvec\"],\"bytes\":[\"aead/bytes\"],\"default\":[\"aes\",\"alloc\",\"getrandom\"],\"getrandom\":[\"aead/getrandom\"],\"hazmat\":[],\"rand_core\":[\"aead/rand_core\"]}}", "aes_0.8.4": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"name\":\"cpufeatures\",\"req\":\"^0.2\",\"target\":\"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3\"},{\"default_features\":false,\"features\":[\"aarch64\"],\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.5.6\",\"target\":\"cfg(all(aes_armv8, target_arch = \\\"aarch64\\\"))\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.6.0\",\"target\":\"cfg(not(all(aes_armv8, target_arch = \\\"aarch64\\\")))\"}],\"features\":{\"hazmat\":[]}}", + "aes_0.9.2": "{\"dependencies\":[{\"name\":\"cipher\",\"req\":\"^0.5\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.5\"},{\"name\":\"cpubits\",\"req\":\"^0.1\"},{\"name\":\"cpufeatures\",\"req\":\"^0.3\",\"target\":\"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.9\"}],\"features\":{\"hazmat\":[]}}", "ahash_0.8.12": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1.0\"},{\"name\":\"const-random\",\"optional\":true,\"req\":\"^0.1.17\"},{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3.2\"},{\"kind\":\"dev\",\"name\":\"fnv\",\"req\":\"^1.0.5\"},{\"kind\":\"dev\",\"name\":\"fxhash\",\"req\":\"^0.2.1\"},{\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.3.1\"},{\"kind\":\"dev\",\"name\":\"hashbrown\",\"req\":\"^0.14.3\"},{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.2\"},{\"kind\":\"dev\",\"name\":\"no-panic\",\"req\":\"^0.1.10\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"once_cell\",\"req\":\"^1.18.0\",\"target\":\"cfg(not(all(target_arch = \\\"arm\\\", target_os = \\\"none\\\")))\"},{\"kind\":\"dev\",\"name\":\"pcg-mwc\",\"req\":\"^0.2.1\"},{\"name\":\"portable-atomic\",\"optional\":true,\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.5\"},{\"kind\":\"dev\",\"name\":\"seahash\",\"req\":\"^4.0\"},{\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.117\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.59\"},{\"kind\":\"dev\",\"name\":\"smallvec\",\"req\":\"^1.13.1\"},{\"kind\":\"build\",\"name\":\"version_check\",\"req\":\"^0.9.4\"},{\"default_features\":false,\"features\":[\"simd\"],\"name\":\"zerocopy\",\"req\":\"^0.8.24\"}],\"features\":{\"atomic-polyfill\":[\"dep:portable-atomic\",\"once_cell/critical-section\"],\"compile-time-rng\":[\"const-random\"],\"default\":[\"std\",\"runtime-rng\"],\"nightly-arm-aes\":[],\"no-rng\":[],\"runtime-rng\":[\"getrandom\"],\"std\":[]}}", "aho-corasick_1.1.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3.3\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.17\"},{\"default_features\":false,\"name\":\"memchr\",\"optional\":true,\"req\":\"^2.4.0\"}],\"features\":{\"default\":[\"std\",\"perf-literal\"],\"logging\":[\"dep:log\"],\"perf-literal\":[\"dep:memchr\"],\"std\":[\"memchr?/std\"]}}", "alloc-no-stdlib_2.0.4": "{\"dependencies\":[],\"features\":{\"unsafe\":[]}}", @@ -579,7 +580,7 @@ "anyhow_1.0.102": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"dev\",\"name\":\"futures\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1.0.6\"},{\"features\":[\"full\"],\"kind\":\"dev\",\"name\":\"syn\",\"req\":\"^2.0\"},{\"kind\":\"dev\",\"name\":\"thiserror\",\"req\":\"^2\"},{\"features\":[\"diff\"],\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.108\"}],\"features\":{\"backtrace\":[],\"default\":[\"std\"],\"std\":[]}}", "apollo-parser_0.8.5": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"annotate-snippets\",\"req\":\"^0.12.0\"},{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0.66\"},{\"kind\":\"dev\",\"name\":\"ariadne\",\"req\":\"^0.6.0\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.8.0\"},{\"kind\":\"dev\",\"name\":\"expect-test\",\"req\":\"^1.4\"},{\"kind\":\"dev\",\"name\":\"indexmap\",\"req\":\"^2.0.0\"},{\"name\":\"memchr\",\"req\":\"^2.6.1\"},{\"kind\":\"dev\",\"name\":\"pretty_assertions\",\"req\":\"^1.3.0\"},{\"name\":\"rowan\",\"req\":\"^0.16.0\"},{\"name\":\"thiserror\",\"req\":\"^2.0.0\"},{\"kind\":\"dev\",\"name\":\"unindent\",\"req\":\"^0.2.1\"}],\"features\":{}}", "arc-swap_1.9.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"adaptive-barrier\",\"req\":\"~1\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"~0.7\"},{\"kind\":\"dev\",\"name\":\"crossbeam-utils\",\"req\":\"~0.8\"},{\"kind\":\"dev\",\"name\":\"itertools\",\"req\":\"^0.14\"},{\"kind\":\"dev\",\"name\":\"num_cpus\",\"req\":\"~1\"},{\"kind\":\"dev\",\"name\":\"once_cell\",\"req\":\"~1\"},{\"kind\":\"dev\",\"name\":\"parking_lot\",\"req\":\"~0.12\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"name\":\"rustversion\",\"req\":\"^1\"},{\"features\":[\"rc\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"serde_derive\",\"req\":\"^1.0.130\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0.177\"}],\"features\":{\"experimental-strategies\":[],\"experimental-thread-local\":[],\"internal-test-strategies\":[],\"weak\":[]}}", - "argon2_0.5.3": "{\"dependencies\":[{\"name\":\"base64ct\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"blake2\",\"req\":\"^0.10.6\"},{\"name\":\"cpufeatures\",\"req\":\"^0.2.12\",\"target\":\"cfg(any(target_arch = \\\"x86\\\", target_arch = \\\"x86_64\\\"))\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4\"},{\"name\":\"password-hash\",\"optional\":true,\"req\":\"^0.5\"},{\"features\":[\"rand_core\"],\"kind\":\"dev\",\"name\":\"password-hash\",\"req\":\"^0.5\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"password-hash/alloc\"],\"default\":[\"alloc\",\"password-hash\",\"rand\"],\"rand\":[\"password-hash/rand_core\"],\"simple\":[\"password-hash\"],\"std\":[\"alloc\",\"password-hash/std\"]}}", + "argon2_0.6.0-rc.8": "{\"dependencies\":[{\"name\":\"base64ct\",\"req\":\"^1.7\"},{\"default_features\":false,\"name\":\"blake2\",\"req\":\"^0.11.0-rc.5\"},{\"name\":\"cpufeatures\",\"req\":\"^0.3\",\"target\":\"cfg(any(target_arch = \\\"x86\\\", target_arch = \\\"x86_64\\\"))\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"kdf\",\"optional\":true,\"req\":\"^0.1\"},{\"features\":[\"phc\"],\"name\":\"password-hash\",\"optional\":true,\"req\":\"^0.6\"},{\"name\":\"rayon\",\"optional\":true,\"req\":\"^1.7\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"password-hash?/alloc\"],\"default\":[\"alloc\",\"getrandom\",\"password-hash\"],\"getrandom\":[\"password-hash/getrandom\"],\"kdf\":[\"alloc\",\"dep:kdf\"],\"parallel\":[\"dep:rayon\"],\"password-hash\":[\"dep:password-hash\"],\"rand_core\":[\"password-hash/rand_core\"],\"zeroize\":[\"dep:zeroize\"]}}", "ascii_1.1.0": "{\"dependencies\":[{\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.25\"},{\"name\":\"serde_test\",\"optional\":true,\"req\":\"^1.0\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[\"alloc\"]}}", "asn1-rs-derive_0.5.1": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1.0\"},{\"name\":\"quote\",\"req\":\"^1.0\"},{\"features\":[\"full\"],\"name\":\"syn\",\"req\":\"^2.0\"},{\"name\":\"synstructure\",\"req\":\"^0.13\"}],\"features\":{}}", "asn1-rs-impl_0.2.0": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"},{\"name\":\"syn\",\"req\":\"^2.0\"}],\"features\":{}}", @@ -616,23 +617,22 @@ "backoff_0.4.0": "{\"dependencies\":[{\"name\":\"async_std_1\",\"optional\":true,\"package\":\"async-std\",\"req\":\"^1.9\"},{\"features\":[\"attributes\"],\"kind\":\"dev\",\"name\":\"async_std_1\",\"package\":\"async-std\",\"req\":\"^1.6\"},{\"default_features\":false,\"name\":\"futures-core\",\"optional\":true,\"req\":\"^0.3.8\"},{\"kind\":\"dev\",\"name\":\"futures-executor\",\"req\":\"^0.3\"},{\"name\":\"getrandom\",\"req\":\"^0.2\"},{\"name\":\"instant\",\"req\":\"^0.1\"},{\"name\":\"pin-project-lite\",\"optional\":true,\"req\":\"^0.2.7\"},{\"name\":\"rand\",\"req\":\"^0.8\"},{\"features\":[\"json\",\"blocking\"],\"kind\":\"dev\",\"name\":\"reqwest\",\"req\":\"^0.11\"},{\"features\":[\"time\"],\"name\":\"tokio_1\",\"optional\":true,\"package\":\"tokio\",\"req\":\"^1.0\"},{\"features\":[\"macros\",\"time\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio_1\",\"package\":\"tokio\",\"req\":\"^1.0\"}],\"features\":{\"async-std\":[\"futures\",\"async_std_1\"],\"default\":[],\"futures\":[\"futures-core\",\"pin-project-lite\"],\"tokio\":[\"futures\",\"tokio_1\"],\"wasm-bindgen\":[\"instant/wasm-bindgen\",\"getrandom/js\"]}}", "backtrace-ext_0.2.1": "{\"dependencies\":[{\"name\":\"backtrace\",\"req\":\"^0.3.61\"},{\"features\":[\"fancy\"],\"kind\":\"dev\",\"name\":\"miette\",\"req\":\"^5.6.0\"},{\"kind\":\"dev\",\"name\":\"thiserror\",\"req\":\"^1.0.40\"}],\"features\":{}}", "backtrace_0.3.76": "{\"dependencies\":[{\"default_features\":false,\"name\":\"addr2line\",\"req\":\"^0.25.0\",\"target\":\"cfg(not(all(windows, target_env = \\\"msvc\\\", not(target_vendor = \\\"uwp\\\"))))\"},{\"name\":\"cfg-if\",\"req\":\"^1.0\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"cpp_demangle\",\"optional\":true,\"req\":\"^0.5.0\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.156\",\"target\":\"cfg(not(all(windows, target_env = \\\"msvc\\\", not(target_vendor = \\\"uwp\\\"))))\"},{\"kind\":\"dev\",\"name\":\"libloading\",\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"miniz_oxide\",\"req\":\"^0.8\",\"target\":\"cfg(not(all(windows, target_env = \\\"msvc\\\", not(target_vendor = \\\"uwp\\\"))))\"},{\"default_features\":false,\"features\":[\"read_core\",\"elf\",\"macho\",\"pe\",\"xcoff\",\"unaligned\",\"archive\"],\"name\":\"object\",\"req\":\"^0.37.0\",\"target\":\"cfg(not(all(windows, target_env = \\\"msvc\\\", not(target_vendor = \\\"uwp\\\"))))\"},{\"name\":\"rustc-demangle\",\"req\":\"^0.1.24\"},{\"default_features\":false,\"name\":\"ruzstd\",\"optional\":true,\"req\":\"^0.8.1\",\"target\":\"cfg(not(all(windows, target_env = \\\"msvc\\\", not(target_vendor = \\\"uwp\\\"))))\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"name\":\"windows-link\",\"req\":\"^0.2\",\"target\":\"cfg(any(windows, target_os = \\\"cygwin\\\"))\"}],\"features\":{\"coresymbolication\":[],\"dbghelp\":[],\"default\":[\"std\"],\"dl_iterate_phdr\":[],\"dladdr\":[],\"kernel32\":[],\"libunwind\":[],\"ruzstd\":[\"dep:ruzstd\"],\"serialize-serde\":[\"serde\"],\"std\":[],\"unix-backtrace\":[]}}", - "base16ct_0.2.0": "{\"dependencies\":[],\"features\":{\"alloc\":[],\"std\":[\"alloc\"]}}", "base16ct_1.0.0": "{\"dependencies\":[],\"features\":{\"alloc\":[]}}", "base64-simd_0.8.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"base64\",\"req\":\"^0.20.0\"},{\"kind\":\"dev\",\"name\":\"const-str\",\"req\":\"^0.5.3\"},{\"features\":[\"js\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.2.8\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"outref\",\"req\":\"^0.5.0\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.5\"},{\"name\":\"vsimd\",\"req\":\"^0.8.0\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3.33\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"}],\"features\":{\"alloc\":[\"vsimd/alloc\"],\"default\":[\"std\",\"detect\"],\"detect\":[\"vsimd/detect\"],\"std\":[\"alloc\",\"vsimd/std\"],\"unstable\":[\"vsimd/unstable\"]}}", "base64_0.13.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"=0.3.2\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.6.1\"},{\"kind\":\"dev\",\"name\":\"structopt\",\"req\":\"^0.3\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[]}}", "base64_0.21.7": "{\"dependencies\":[{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"clap\",\"req\":\"^3.2.25\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.4.0\"},{\"kind\":\"dev\",\"name\":\"once_cell\",\"req\":\"^1\"},{\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.5\"},{\"kind\":\"dev\",\"name\":\"rstest\",\"req\":\"^0.13.0\"},{\"kind\":\"dev\",\"name\":\"rstest_reuse\",\"req\":\"^0.6.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"strum\",\"req\":\"^0.25\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[\"alloc\"]}}", "base64_0.22.1": "{\"dependencies\":[{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"clap\",\"req\":\"^3.2.25\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.4.0\"},{\"kind\":\"dev\",\"name\":\"once_cell\",\"req\":\"^1\"},{\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.5\"},{\"kind\":\"dev\",\"name\":\"rstest\",\"req\":\"^0.13.0\"},{\"kind\":\"dev\",\"name\":\"rstest_reuse\",\"req\":\"^0.6.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"strum\",\"req\":\"^0.25\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[\"alloc\"]}}", "base64ct_1.8.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"base64\",\"req\":\"^0.22\"},{\"default_features\":false,\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.6\"}],\"features\":{\"alloc\":[],\"std\":[\"alloc\"]}}", - "bcrypt-pbkdf_0.10.0": "{\"dependencies\":[{\"features\":[\"bcrypt\"],\"name\":\"blowfish\",\"req\":\"^0.9.1\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3.3\"},{\"default_features\":false,\"name\":\"pbkdf2\",\"req\":\"^0.12\"},{\"default_features\":false,\"name\":\"sha2\",\"req\":\"^0.10.5\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[],\"default\":[\"alloc\",\"std\"],\"std\":[]}}", + "bcrypt-pbkdf_0.11.0": "{\"dependencies\":[{\"features\":[\"bcrypt\"],\"name\":\"blowfish\",\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"pbkdf2\",\"req\":\"^0.13\"},{\"default_features\":false,\"name\":\"sha2\",\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[],\"default\":[\"alloc\"],\"zeroize\":[\"dep:zeroize\"]}}", "bindgen_0.72.1": "{\"dependencies\":[{\"name\":\"annotate-snippets\",\"optional\":true,\"req\":\"^0.11.4\"},{\"name\":\"bitflags\",\"req\":\"^2.2.1\"},{\"name\":\"cexpr\",\"req\":\"^0.6\"},{\"features\":[\"clang_11_0\"],\"name\":\"clang-sys\",\"req\":\"^1\"},{\"features\":[\"derive\"],\"name\":\"clap\",\"optional\":true,\"req\":\"^4\"},{\"name\":\"clap_complete\",\"optional\":true,\"req\":\"^4\"},{\"default_features\":false,\"name\":\"itertools\",\"req\":\">=0.10, <0.14\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4\"},{\"features\":[\"verbatim\"],\"name\":\"prettyplease\",\"optional\":true,\"req\":\"^0.2.7\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.80\"},{\"default_features\":false,\"name\":\"quote\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"std\",\"unicode-perl\"],\"name\":\"regex\",\"req\":\"^1.5.3\"},{\"name\":\"rustc-hash\",\"req\":\"^2.1.0\"},{\"name\":\"shlex\",\"req\":\"^1\"},{\"features\":[\"full\",\"extra-traits\",\"visit-mut\"],\"name\":\"syn\",\"req\":\"^2.0\"}],\"features\":{\"__cli\":[\"dep:clap\",\"dep:clap_complete\"],\"__testing_only_extra_assertions\":[],\"__testing_only_libclang_16\":[],\"__testing_only_libclang_9\":[],\"default\":[\"logging\",\"prettyplease\",\"runtime\"],\"experimental\":[\"dep:annotate-snippets\"],\"logging\":[\"dep:log\"],\"runtime\":[\"clang-sys/runtime\"],\"static\":[\"clang-sys/static\"]}}", "bitflags_1.3.2": "{\"dependencies\":[{\"name\":\"compiler_builtins\",\"optional\":true,\"req\":\"^0.1.2\"},{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_derive\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"walkdir\",\"req\":\"^2.3\"}],\"features\":{\"default\":[],\"example_generated\":[],\"rustc-dep-of-std\":[\"core\",\"compiler_builtins\"]}}", "bitflags_2.11.0": "{\"dependencies\":[{\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"arbitrary\",\"req\":\"^1.0\"},{\"name\":\"bytemuck\",\"optional\":true,\"req\":\"^1.12\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"bytemuck\",\"req\":\"^1.12.2\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.228\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde_lib\",\"package\":\"serde\",\"req\":\"^1.0.103\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0.19\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.18\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"zerocopy\",\"req\":\"^0.8\"}],\"features\":{\"example_generated\":[],\"serde\":[\"serde_core\"],\"std\":[]}}", "bitflags_2.11.1": "{\"dependencies\":[{\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"arbitrary\",\"req\":\"^1.0\"},{\"name\":\"bytemuck\",\"optional\":true,\"req\":\"^1.12\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"bytemuck\",\"req\":\"^1.12.2\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.228\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde_lib\",\"package\":\"serde\",\"req\":\"^1.0.103\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0.19\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.18\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"zerocopy\",\"req\":\"^0.8\"}],\"features\":{\"example_generated\":[],\"serde\":[\"serde_core\"],\"std\":[]}}", - "blake2_0.10.6": "{\"dependencies\":[{\"features\":[\"mac\"],\"name\":\"digest\",\"req\":\"^0.10.3\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"digest\",\"req\":\"^0.10.3\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.2.2\"}],\"features\":{\"default\":[\"std\"],\"reset\":[],\"simd\":[],\"simd_asm\":[\"simd_opt\"],\"simd_opt\":[\"simd\"],\"size_opt\":[],\"std\":[\"digest/std\"]}}", + "blake2_0.11.0-rc.6": "{\"dependencies\":[{\"features\":[\"mac\"],\"name\":\"digest\",\"req\":\"^0.11\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"digest\",\"req\":\"^0.11\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"}],\"features\":{\"alloc\":[\"digest/alloc\"],\"default\":[\"alloc\"],\"reset\":[],\"size_opt\":[],\"zeroize\":[\"digest/zeroize\"]}}", "block-buffer_0.10.4": "{\"dependencies\":[{\"name\":\"generic-array\",\"req\":\"^0.14\"}],\"features\":{}}", "block-buffer_0.12.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"hybrid-array\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.4\"}],\"features\":{}}", - "block-padding_0.3.3": "{\"dependencies\":[{\"name\":\"generic-array\",\"req\":\"^0.14\"}],\"features\":{\"std\":[]}}", - "blowfish_0.9.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"byteorder\",\"req\":\"^1.1\"},{\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.4.2\"}],\"features\":{\"bcrypt\":[],\"zeroize\":[\"cipher/zeroize\"]}}", + "block-padding_0.4.2": "{\"dependencies\":[{\"name\":\"hybrid-array\",\"req\":\"^0.4.3\"}],\"features\":{}}", + "blowfish_0.10.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"byteorder\",\"req\":\"^1.1\"},{\"name\":\"cipher\",\"req\":\"^0.5\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.5\"}],\"features\":{\"bcrypt\":[],\"zeroize\":[\"cipher/zeroize\"]}}", "bollard-stubs_1.52.1-rc.29.1.3": "{\"dependencies\":[{\"name\":\"base64\",\"optional\":true,\"req\":\"^0.22\"},{\"name\":\"bollard-buildkit-proto\",\"optional\":true,\"req\":\"^0.7.0\"},{\"name\":\"bytes\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"std\",\"clock\",\"serde\"],\"name\":\"chrono\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"prost\",\"optional\":true,\"req\":\"^0.14\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"req\":\"^1.0\"},{\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"name\":\"serde_repr\",\"req\":\"^0.1\"},{\"features\":[\"formatting\",\"parsing\"],\"name\":\"time\",\"optional\":true,\"req\":\"^0.3\"}],\"features\":{\"buildkit\":[\"base64\",\"bytes\",\"bollard-buildkit-proto\",\"prost\"]}}", "bollard_0.20.2": "{\"dependencies\":[{\"name\":\"async-stream\",\"optional\":true,\"req\":\"^0.3.5\"},{\"name\":\"base64\",\"req\":\"^0.22\"},{\"name\":\"bitflags\",\"optional\":true,\"req\":\"^2.6.0\"},{\"name\":\"bollard-buildkit-proto\",\"optional\":true,\"req\":\"^0.7.0\"},{\"default_features\":false,\"name\":\"bollard-stubs\",\"req\":\"=1.52.1-rc.29.1.3\"},{\"name\":\"bytes\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"std\",\"clock\",\"serde\"],\"name\":\"chrono\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"flate2\",\"req\":\"^1.0\"},{\"name\":\"futures-core\",\"req\":\"^0.3\"},{\"name\":\"futures-util\",\"req\":\"^0.3\"},{\"name\":\"hex\",\"req\":\"^0.4\"},{\"name\":\"home\",\"optional\":true,\"req\":\"^0.5\"},{\"name\":\"http\",\"req\":\"^1.1\"},{\"name\":\"http-body-util\",\"req\":\"^0.1\"},{\"features\":[\"client\",\"http1\"],\"name\":\"hyper\",\"req\":\"^1.3\"},{\"name\":\"hyper-named-pipe\",\"optional\":true,\"req\":\"^0.1.0\",\"target\":\"cfg(windows)\"},{\"default_features\":false,\"features\":[\"http1\"],\"name\":\"hyper-rustls\",\"optional\":true,\"req\":\"^0.27\"},{\"features\":[\"http1\",\"client-legacy\",\"tokio\"],\"name\":\"hyper-util\",\"optional\":true,\"req\":\"^0.1.5\"},{\"name\":\"hyperlocal\",\"optional\":true,\"req\":\"^0.9.0\",\"target\":\"cfg(unix)\"},{\"name\":\"log\",\"req\":\"^0.4\"},{\"name\":\"num\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"once_cell\",\"req\":\"^1.19\"},{\"name\":\"openssh\",\"optional\":true,\"req\":\"^0.11.5\"},{\"name\":\"pin-project-lite\",\"req\":\"^0.2\"},{\"default_features\":false,\"features\":[\"thread_rng\"],\"name\":\"rand\",\"optional\":true,\"req\":\"^0.9\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"rustls\",\"optional\":true,\"req\":\"^0.23\"},{\"name\":\"rustls-native-certs\",\"optional\":true,\"req\":\"^0.8.0\"},{\"name\":\"rustls-pki-types\",\"optional\":true,\"req\":\"^1.7\"},{\"name\":\"serde\",\"req\":\"^1.0\"},{\"name\":\"serde_derive\",\"req\":\"^1.0\"},{\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"name\":\"serde_urlencoded\",\"req\":\"^0.7\"},{\"kind\":\"dev\",\"name\":\"tar\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"termion\",\"req\":\"^4.0\",\"target\":\"cfg(unix)\"},{\"name\":\"thiserror\",\"req\":\"^2.0\"},{\"features\":[\"formatting\",\"parsing\",\"serde\",\"serde-well-known\"],\"name\":\"time\",\"optional\":true,\"req\":\"^0.3\"},{\"features\":[\"time\",\"net\",\"io-util\"],\"name\":\"tokio\",\"req\":\"^1.47\"},{\"features\":[\"fs\",\"rt-multi-thread\",\"macros\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.38\"},{\"features\":[\"net\"],\"name\":\"tokio-stream\",\"optional\":true,\"req\":\"^0.1\"},{\"default_features\":false,\"features\":[\"handshake\"],\"name\":\"tokio-tungstenite\",\"optional\":true,\"req\":\"^0.28\"},{\"features\":[\"codec\"],\"name\":\"tokio-util\",\"req\":\"^0.7\"},{\"features\":[\"io\"],\"kind\":\"dev\",\"name\":\"tokio-util\",\"req\":\"^0.7\"},{\"default_features\":false,\"features\":[\"channel\"],\"name\":\"tonic\",\"optional\":true,\"req\":\"^0.14\"},{\"name\":\"tower-service\",\"req\":\"^0.3\",\"target\":\"cfg(windows)\"},{\"name\":\"tower-service\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"url\",\"req\":\"^2.5\"},{\"name\":\"webpki-roots\",\"optional\":true,\"req\":\"^1.0\"},{\"features\":[\"winerror\"],\"name\":\"winapi\",\"req\":\"^0.3.9\",\"target\":\"cfg(windows)\"},{\"kind\":\"dev\",\"name\":\"yup-hyper-mock\",\"req\":\"^8.0.0\"}],\"features\":{\"aws-lc-rs\":[\"ssl_providerless\",\"rustls/aws-lc-rs\"],\"buildkit\":[\"buildkit_providerless\",\"ssl\"],\"buildkit_providerless\":[\"num\",\"rand\",\"tokio/fs\",\"tokio-stream\",\"tokio-util/io\",\"tonic\",\"tower-service\",\"ssl_providerless\",\"bollard-stubs/buildkit\",\"bollard-buildkit-proto\",\"dep:async-stream\",\"dep:bitflags\"],\"chrono\":[\"dep:chrono\",\"bollard-stubs/chrono\"],\"default\":[\"http\",\"pipe\"],\"http\":[\"hyper-util\"],\"json_data_content\":[],\"pipe\":[\"hyper-util\",\"hyperlocal\",\"hyper-named-pipe\"],\"ssh\":[\"hyper-util\",\"openssh\",\"tower-service\"],\"ssl\":[\"ssl_providerless\",\"rustls/ring\"],\"ssl_providerless\":[\"home\",\"hyper-rustls\",\"rustls\",\"rustls-native-certs\",\"rustls-pki-types\",\"http\"],\"test_aws_lc_rs\":[\"test_ssl\",\"aws-lc-rs\"],\"test_checkpoint\":[],\"test_http\":[],\"test_macos\":[],\"test_ring\":[\"test_ssl\",\"ssl\"],\"test_ssh\":[\"ssh\"],\"test_sshforward\":[],\"test_ssl\":[\"dep:webpki-roots\",\"ssl_providerless\"],\"test_swarm\":[],\"test_websocket\":[\"websocket\"],\"time\":[\"dep:time\",\"bollard-stubs/time\"],\"webpki\":[\"ssl\",\"dep:webpki-roots\"],\"websocket\":[\"tokio-tungstenite\"]}}", "brotli-decompressor_4.0.3": "{\"dependencies\":[{\"name\":\"alloc-no-stdlib\",\"req\":\"~2.0\"},{\"name\":\"alloc-stdlib\",\"optional\":true,\"req\":\"~0.2\"}],\"features\":{\"benchmark\":[],\"default\":[\"std\"],\"disable-timer\":[],\"ffi-api\":[],\"pass-through-ffi-panics\":[],\"seccomp\":[],\"std\":[\"alloc-stdlib\"],\"unsafe\":[\"alloc-no-stdlib/unsafe\",\"alloc-stdlib/unsafe\"]}}", @@ -647,17 +647,18 @@ "capctl_0.2.4": "{\"dependencies\":[{\"name\":\"bitflags\",\"req\":\"^1.3\"},{\"name\":\"cfg-if\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2\"},{\"name\":\"sc\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0\"}],\"features\":{\"default\":[\"std\"],\"std\":[]}}", "cassowary_0.3.0": "{\"dependencies\":[],\"features\":{}}", "castaway_0.2.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"paste\",\"req\":\"^1\"},{\"name\":\"rustversion\",\"req\":\"^1\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[\"alloc\"]}}", - "cbc_0.1.2": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"aes\",\"req\":\"^0.8\"},{\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3.3\"}],\"features\":{\"alloc\":[\"cipher/alloc\"],\"block-padding\":[\"cipher/block-padding\"],\"default\":[\"block-padding\"],\"std\":[\"cipher/std\",\"alloc\"],\"zeroize\":[\"cipher/zeroize\"]}}", + "cbc_0.2.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"aes\",\"req\":\"^0.9\"},{\"name\":\"cipher\",\"req\":\"^0.5.2\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.5.2\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"}],\"features\":{\"alloc\":[\"cipher/alloc\"],\"block-padding\":[\"cipher/block-padding\"],\"default\":[\"block-padding\"],\"zeroize\":[\"cipher/zeroize\"]}}", "cc_1.2.60": "{\"dependencies\":[{\"name\":\"find-msvc-tools\",\"req\":\"^0.1.9\"},{\"default_features\":false,\"name\":\"jobserver\",\"optional\":true,\"req\":\"^0.1.30\"},{\"default_features\":false,\"name\":\"libc\",\"optional\":true,\"req\":\"^0.2.62\",\"target\":\"cfg(unix)\"},{\"name\":\"shlex\",\"req\":\"^1.3.0\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"}],\"features\":{\"jobserver\":[],\"parallel\":[\"dep:libc\",\"dep:jobserver\"]}}", "cc_1.2.62": "{\"dependencies\":[{\"name\":\"find-msvc-tools\",\"req\":\"^0.1.9\"},{\"default_features\":false,\"name\":\"jobserver\",\"optional\":true,\"req\":\"^0.1.30\"},{\"default_features\":false,\"name\":\"libc\",\"optional\":true,\"req\":\"^0.2.62\",\"target\":\"cfg(unix)\"},{\"name\":\"shlex\",\"req\":\"^1.3.0\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"}],\"features\":{\"jobserver\":[],\"parallel\":[\"dep:libc\",\"dep:jobserver\"]}}", "cesu8_1.1.0": "{\"dependencies\":[],\"features\":{\"unstable\":[]}}", "cexpr_0.6.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"clang-sys\",\"req\":\">=0.13.0, <0.29.0\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"nom\",\"req\":\"^7\"}],\"features\":{}}", "cfg-if_1.0.4": "{\"dependencies\":[{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"}],\"features\":{\"rustc-dep-of-std\":[\"core\"]}}", "cfg_aliases_0.2.1": "{\"dependencies\":[],\"features\":{}}", - "chacha20_0.9.1": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"name\":\"cipher\",\"req\":\"^0.4.4\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.4.4\"},{\"name\":\"cpufeatures\",\"req\":\"^0.2\",\"target\":\"cfg(any(target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3.3\"}],\"features\":{\"std\":[\"cipher/std\"],\"zeroize\":[\"cipher/zeroize\"]}}", + "chacha20_0.10.1": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"features\":[\"stream-wrapper\"],\"name\":\"cipher\",\"optional\":true,\"req\":\"^0.5\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.5\"},{\"name\":\"cpufeatures\",\"req\":\"^0.3\",\"target\":\"cfg(any(target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.8.1\"}],\"features\":{\"default\":[\"cipher\"],\"legacy\":[\"cipher\"],\"rng\":[\"dep:rand_core\"],\"xchacha\":[\"cipher\"]}}", "chrono_0.4.44": "{\"dependencies\":[{\"features\":[\"derive\"],\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1.3.0\"},{\"name\":\"defmt\",\"optional\":true,\"req\":\"^1.0.1\"},{\"features\":[\"fallback\"],\"name\":\"iana-time-zone\",\"optional\":true,\"req\":\"^0.1.45\",\"target\":\"cfg(unix)\"},{\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\"))))\"},{\"default_features\":false,\"name\":\"num-traits\",\"req\":\"^0.2\"},{\"name\":\"pure-rust-locales\",\"optional\":true,\"req\":\"^0.8.2\"},{\"default_features\":false,\"name\":\"rkyv\",\"optional\":true,\"req\":\"^0.7.43\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.99\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"serde_derive\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"similar-asserts\",\"req\":\"^1.6.1\"},{\"name\":\"wasm-bindgen\",\"optional\":true,\"req\":\"^0.2\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\"))))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\"))))\"},{\"kind\":\"dev\",\"name\":\"windows-bindgen\",\"req\":\"^0.66\"},{\"name\":\"windows-link\",\"optional\":true,\"req\":\"^0.2\",\"target\":\"cfg(windows)\"}],\"features\":{\"__internal_bench\":[],\"alloc\":[],\"clock\":[\"winapi\",\"iana-time-zone\",\"now\"],\"core-error\":[],\"default\":[\"clock\",\"std\",\"oldtime\",\"wasmbind\"],\"defmt\":[\"dep:defmt\",\"pure-rust-locales?/defmt\"],\"libc\":[],\"now\":[\"std\"],\"oldtime\":[],\"rkyv\":[\"dep:rkyv\",\"rkyv/size_32\"],\"rkyv-16\":[\"dep:rkyv\",\"rkyv?/size_16\"],\"rkyv-32\":[\"dep:rkyv\",\"rkyv?/size_32\"],\"rkyv-64\":[\"dep:rkyv\",\"rkyv?/size_64\"],\"rkyv-validation\":[\"rkyv?/validation\"],\"std\":[\"alloc\"],\"unstable-locales\":[\"pure-rust-locales\"],\"wasmbind\":[\"wasm-bindgen\",\"js-sys\"],\"winapi\":[\"windows-link\"]}}", "chunked_transfer_1.5.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3\"}],\"features\":{}}", "cipher_0.4.4": "{\"dependencies\":[{\"name\":\"blobby\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"crypto-common\",\"req\":\"^0.1.6\"},{\"name\":\"inout\",\"req\":\"^0.1\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.5\"}],\"features\":{\"alloc\":[],\"block-padding\":[\"inout/block-padding\"],\"dev\":[\"blobby\"],\"rand_core\":[\"crypto-common/rand_core\"],\"std\":[\"alloc\",\"crypto-common/std\",\"inout/std\"]}}", + "cipher_0.5.2": "{\"dependencies\":[{\"name\":\"blobby\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"block-buffer\",\"optional\":true,\"req\":\"^0.12\"},{\"name\":\"common\",\"package\":\"crypto-common\",\"req\":\"^0.2.2\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"inout\",\"req\":\"^0.2.2\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.8\"}],\"features\":{\"alloc\":[],\"block-padding\":[\"inout/block-padding\"],\"dev\":[\"blobby\"],\"getrandom\":[\"common/getrandom\"],\"rand_core\":[\"common/rand_core\"],\"stream-wrapper\":[\"block-buffer\"],\"zeroize\":[\"dep:zeroize\",\"common/zeroize\",\"block-buffer?/zeroize\"]}}", "clang-sys_1.8.1": "{\"dependencies\":[{\"name\":\"glob\",\"req\":\"^0.3\"},{\"kind\":\"build\",\"name\":\"glob\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"glob\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"lazy_static\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.39\"},{\"name\":\"libloading\",\"optional\":true,\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\">=3.0.0, <3.7.0\"}],\"features\":{\"clang_10_0\":[\"clang_9_0\"],\"clang_11_0\":[\"clang_10_0\"],\"clang_12_0\":[\"clang_11_0\"],\"clang_13_0\":[\"clang_12_0\"],\"clang_14_0\":[\"clang_13_0\"],\"clang_15_0\":[\"clang_14_0\"],\"clang_16_0\":[\"clang_15_0\"],\"clang_17_0\":[\"clang_16_0\"],\"clang_18_0\":[\"clang_17_0\"],\"clang_3_5\":[],\"clang_3_6\":[\"clang_3_5\"],\"clang_3_7\":[\"clang_3_6\"],\"clang_3_8\":[\"clang_3_7\"],\"clang_3_9\":[\"clang_3_8\"],\"clang_4_0\":[\"clang_3_9\"],\"clang_5_0\":[\"clang_4_0\"],\"clang_6_0\":[\"clang_5_0\"],\"clang_7_0\":[\"clang_6_0\"],\"clang_8_0\":[\"clang_7_0\"],\"clang_9_0\":[\"clang_8_0\"],\"libcpp\":[],\"runtime\":[\"libloading\"],\"static\":[]}}", "clap_4.6.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"automod\",\"req\":\"^1.0.16\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"clap-cargo\",\"req\":\"^0.15.2\"},{\"default_features\":false,\"name\":\"clap_builder\",\"req\":\"=4.6.0\"},{\"name\":\"clap_derive\",\"optional\":true,\"req\":\"=4.6.0\"},{\"kind\":\"dev\",\"name\":\"jiff\",\"req\":\"^0.2.23\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1.0.22\"},{\"kind\":\"dev\",\"name\":\"semver\",\"req\":\"^1.0.27\"},{\"kind\":\"dev\",\"name\":\"shlex\",\"req\":\"^1.3.0\"},{\"features\":[\"term-svg\"],\"kind\":\"dev\",\"name\":\"snapbox\",\"req\":\"^1.1.0\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.116\"},{\"default_features\":false,\"features\":[\"color-auto\",\"diff\",\"examples\"],\"kind\":\"dev\",\"name\":\"trycmd\",\"req\":\"^1.1.1\"}],\"features\":{\"cargo\":[\"clap_builder/cargo\"],\"color\":[\"clap_builder/color\"],\"debug\":[\"clap_builder/debug\",\"clap_derive?/debug\"],\"default\":[\"std\",\"color\",\"help\",\"usage\",\"error-context\",\"suggestions\"],\"deprecated\":[\"clap_builder/deprecated\",\"clap_derive?/deprecated\"],\"derive\":[\"dep:clap_derive\"],\"env\":[\"clap_builder/env\"],\"error-context\":[\"clap_builder/error-context\"],\"help\":[\"clap_builder/help\"],\"std\":[\"clap_builder/std\"],\"string\":[\"clap_builder/string\"],\"suggestions\":[\"clap_builder/suggestions\"],\"unicode\":[\"clap_builder/unicode\"],\"unstable-derive-ui-tests\":[],\"unstable-doc\":[\"clap_builder/unstable-doc\",\"derive\"],\"unstable-ext\":[\"clap_builder/unstable-ext\"],\"unstable-markdown\":[\"clap_derive/unstable-markdown\"],\"unstable-styles\":[\"clap_builder/unstable-styles\"],\"unstable-v5\":[\"clap_builder/unstable-v5\",\"clap_derive?/unstable-v5\",\"deprecated\"],\"usage\":[\"clap_builder/usage\"],\"wrap_help\":[\"clap_builder/wrap_help\"]}}", "clap_4.6.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"automod\",\"req\":\"^1.0.16\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"clap-cargo\",\"req\":\"^0.15.2\"},{\"default_features\":false,\"name\":\"clap_builder\",\"req\":\"=4.6.0\"},{\"name\":\"clap_derive\",\"optional\":true,\"req\":\"=4.6.1\"},{\"kind\":\"dev\",\"name\":\"jiff\",\"req\":\"^0.2.23\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1.0.22\"},{\"kind\":\"dev\",\"name\":\"semver\",\"req\":\"^1.0.27\"},{\"kind\":\"dev\",\"name\":\"shlex\",\"req\":\"^1.3.0\"},{\"features\":[\"term-svg\"],\"kind\":\"dev\",\"name\":\"snapbox\",\"req\":\"^1.2.0\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.116\"},{\"default_features\":false,\"features\":[\"color-auto\",\"diff\",\"examples\"],\"kind\":\"dev\",\"name\":\"trycmd\",\"req\":\"^1.2.0\"}],\"features\":{\"cargo\":[\"clap_builder/cargo\"],\"color\":[\"clap_builder/color\"],\"debug\":[\"clap_builder/debug\",\"clap_derive?/debug\"],\"default\":[\"std\",\"color\",\"help\",\"usage\",\"error-context\",\"suggestions\"],\"deprecated\":[\"clap_builder/deprecated\",\"clap_derive?/deprecated\"],\"derive\":[\"dep:clap_derive\"],\"env\":[\"clap_builder/env\"],\"error-context\":[\"clap_builder/error-context\"],\"help\":[\"clap_builder/help\"],\"std\":[\"clap_builder/std\"],\"string\":[\"clap_builder/string\"],\"suggestions\":[\"clap_builder/suggestions\"],\"unicode\":[\"clap_builder/unicode\"],\"unstable-derive-ui-tests\":[],\"unstable-doc\":[\"clap_builder/unstable-doc\",\"derive\"],\"unstable-ext\":[\"clap_builder/unstable-ext\"],\"unstable-markdown\":[\"clap_derive/unstable-markdown\"],\"unstable-styles\":[\"clap_builder/unstable-styles\"],\"unstable-v5\":[\"clap_builder/unstable-v5\",\"clap_derive?/unstable-v5\",\"deprecated\"],\"usage\":[\"clap_builder/usage\"],\"wrap_help\":[\"clap_builder/wrap_help\"]}}", @@ -667,7 +668,7 @@ "clap_derive_4.6.1": "{\"dependencies\":[{\"name\":\"anstyle\",\"optional\":true,\"req\":\"^1.0.14\"},{\"name\":\"heck\",\"req\":\"^0.5.0\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.106\"},{\"default_features\":false,\"name\":\"pulldown-cmark\",\"optional\":true,\"req\":\"^0.13.3\"},{\"name\":\"quote\",\"req\":\"^1.0.45\"},{\"features\":[\"full\"],\"name\":\"syn\",\"req\":\"^2.0.117\"}],\"features\":{\"debug\":[],\"default\":[],\"deprecated\":[],\"raw-deprecated\":[\"deprecated\"],\"unstable-markdown\":[\"dep:pulldown-cmark\",\"dep:anstyle\"],\"unstable-v5\":[\"deprecated\"]}}", "clap_lex_1.1.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"automod\",\"req\":\"^1.0.16\"}],\"features\":{}}", "cmake_0.1.58": "{\"dependencies\":[{\"name\":\"cc\",\"req\":\"^1.2.46\"}],\"features\":{}}", - "cmov_0.5.0-pre.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.9\"}],\"features\":{}}", + "cmov_0.5.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.11\",\"target\":\"cfg(any(unix, windows))\"}],\"features\":{}}", "colorchoice_1.0.5": "{\"dependencies\":[],\"features\":{}}", "combine_4.6.7": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"async-std\",\"req\":\"^1\"},{\"name\":\"bytes\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"bytes\",\"req\":\"^1\"},{\"name\":\"bytes_05\",\"optional\":true,\"package\":\"bytes\",\"req\":\"^0.5\"},{\"kind\":\"dev\",\"name\":\"bytes_05\",\"package\":\"bytes\",\"req\":\"^0.5\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"futures-03-dep\",\"package\":\"futures\",\"req\":\"^0.3.1\"},{\"default_features\":false,\"name\":\"futures-core-03\",\"optional\":true,\"package\":\"futures-core\",\"req\":\"^0.3.1\"},{\"default_features\":false,\"name\":\"futures-io-03\",\"optional\":true,\"package\":\"futures-io\",\"req\":\"^0.3.1\"},{\"default_features\":false,\"name\":\"memchr\",\"req\":\"^2.3\"},{\"kind\":\"dev\",\"name\":\"once_cell\",\"req\":\"^1.0\"},{\"features\":[\"tokio\",\"quickcheck\"],\"kind\":\"dev\",\"name\":\"partial-io\",\"req\":\"^0.3\"},{\"name\":\"pin-project-lite\",\"optional\":true,\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"quick-error\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^0.6\"},{\"name\":\"regex\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"io-util\"],\"name\":\"tokio-02-dep\",\"optional\":true,\"package\":\"tokio\",\"req\":\"^0.2.3\"},{\"features\":[\"fs\",\"io-driver\",\"io-util\",\"macros\"],\"kind\":\"dev\",\"name\":\"tokio-02-dep\",\"package\":\"tokio\",\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"tokio-03-dep\",\"optional\":true,\"package\":\"tokio\",\"req\":\"^0.3\"},{\"features\":[\"fs\",\"macros\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio-03-dep\",\"package\":\"tokio\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"tokio-dep\",\"optional\":true,\"package\":\"tokio\",\"req\":\"^1\"},{\"features\":[\"fs\",\"macros\",\"rt\",\"rt-multi-thread\",\"io-util\"],\"kind\":\"dev\",\"name\":\"tokio-dep\",\"package\":\"tokio\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"codec\"],\"name\":\"tokio-util\",\"optional\":true,\"req\":\"^0.7\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"futures-03\":[\"pin-project\",\"std\",\"futures-core-03\",\"futures-io-03\",\"pin-project-lite\"],\"mp4\":[],\"pin-project\":[\"pin-project-lite\"],\"std\":[\"memchr/std\",\"bytes\",\"alloc\"],\"tokio\":[\"tokio-dep\",\"tokio-util/io\",\"futures-core-03\",\"pin-project-lite\"],\"tokio-02\":[\"pin-project\",\"std\",\"tokio-02-dep\",\"futures-core-03\",\"pin-project-lite\",\"bytes_05\"],\"tokio-03\":[\"pin-project\",\"std\",\"tokio-03-dep\",\"futures-core-03\",\"pin-project-lite\"]}}", "compact_str_0.7.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"bytes\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"castaway\",\"req\":\"^0.2\"},{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"cfg-if\",\"req\":\"^1\"},{\"name\":\"itoa\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"markup\",\"optional\":true,\"req\":\"^0.13\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"proptest\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"1.0.*\"},{\"default_features\":false,\"name\":\"quickcheck\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"quickcheck_macros\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"rayon\",\"req\":\"^1.6.0\"},{\"default_features\":false,\"features\":[\"size_32\"],\"name\":\"rkyv\",\"optional\":true,\"req\":\"^0.7\"},{\"default_features\":false,\"features\":[\"alloc\",\"size_32\"],\"kind\":\"dev\",\"name\":\"rkyv\",\"req\":\"^0.7\"},{\"name\":\"ryu\",\"req\":\"^1\"},{\"name\":\"serde\",\"optional\":true,\"req\":\"^1\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1\"},{\"features\":[\"union\"],\"name\":\"smallvec\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"static_assertions\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"test-case\",\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"test-strategy\",\"req\":\"^0.2\"}],\"features\":{}}", @@ -680,8 +681,8 @@ "constant_time_eq_0.4.2": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"count_instructions\",\"req\":\"^0.2.0\"},{\"features\":[\"cargo_bench_support\",\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.1\"}],\"features\":{\"count_instructions_test\":[],\"default\":[\"std\"],\"std\":[]}}", "core-foundation-sys_0.8.7": "{\"dependencies\":[],\"features\":{\"default\":[\"link\"],\"link\":[],\"mac_os_10_7_support\":[],\"mac_os_10_8_features\":[]}}", "core-foundation_0.10.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"core-foundation-sys\",\"req\":\"^0.8\"},{\"name\":\"libc\",\"req\":\"^0.2\"},{\"name\":\"uuid\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"default\":[\"link\"],\"link\":[\"core-foundation-sys/link\"],\"mac_os_10_7_support\":[\"core-foundation-sys/mac_os_10_7_support\"],\"mac_os_10_8_features\":[\"core-foundation-sys/mac_os_10_8_features\"],\"with-uuid\":[\"dep:uuid\"]}}", - "core-models_0.0.4": "{\"dependencies\":[{\"name\":\"hax-lib\",\"req\":\"=0.3.5\"},{\"name\":\"pastey\",\"req\":\"^0.1.0\"},{\"name\":\"rand\",\"req\":\"^0.9\"}],\"features\":{}}", "countme_3.0.1": "{\"dependencies\":[{\"name\":\"dashmap\",\"optional\":true,\"req\":\"^5.0\"},{\"name\":\"once_cell\",\"optional\":true,\"req\":\"^1.5\"},{\"name\":\"rustc-hash\",\"optional\":true,\"req\":\"^1.1\"}],\"features\":{\"enable\":[\"dashmap\",\"once_cell\",\"rustc-hash\"],\"print_at_exit\":[\"enable\"]}}", + "cpubits_0.1.1": "{\"dependencies\":[],\"features\":{}}", "cpufeatures_0.2.17": "{\"dependencies\":[{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"aarch64-linux-android\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\"}],\"features\":{}}", "cpufeatures_0.3.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"android\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\"}],\"features\":{}}", "crc-catalog_2.4.0": "{\"dependencies\":[],\"features\":{}}", @@ -695,15 +696,14 @@ "crossterm_0.27.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"async-std\",\"req\":\"^1.12\"},{\"name\":\"bitflags\",\"req\":\"^2.3\"},{\"name\":\"crossterm_winapi\",\"optional\":true,\"req\":\"^0.9.1\",\"target\":\"cfg(windows)\"},{\"name\":\"filedescriptor\",\"optional\":true,\"req\":\"^0.8\",\"target\":\"cfg(unix)\"},{\"kind\":\"dev\",\"name\":\"futures\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"futures-core\",\"optional\":true,\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"futures-timer\",\"req\":\"^3.0\"},{\"name\":\"libc\",\"req\":\"^0.2\",\"target\":\"cfg(unix)\"},{\"features\":[\"os-poll\"],\"name\":\"mio\",\"optional\":true,\"req\":\"^0.8\",\"target\":\"cfg(unix)\"},{\"name\":\"parking_lot\",\"req\":\"^0.12\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serial_test\",\"req\":\"^2.0.0\"},{\"name\":\"signal-hook\",\"optional\":true,\"req\":\"^0.3.17\",\"target\":\"cfg(unix)\"},{\"features\":[\"support-v0_8\"],\"name\":\"signal-hook-mio\",\"optional\":true,\"req\":\"^0.2.3\",\"target\":\"cfg(unix)\"},{\"features\":[\"full\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.25\"},{\"features\":[\"winuser\",\"winerror\"],\"name\":\"winapi\",\"optional\":true,\"req\":\"^0.3.9\",\"target\":\"cfg(windows)\"}],\"features\":{\"bracketed-paste\":[],\"default\":[\"bracketed-paste\",\"windows\",\"events\"],\"event-stream\":[\"dep:futures-core\",\"events\"],\"events\":[\"dep:mio\",\"dep:signal-hook\",\"dep:signal-hook-mio\"],\"serde\":[\"dep:serde\",\"bitflags/serde\"],\"use-dev-tty\":[\"filedescriptor\"],\"windows\":[\"dep:winapi\",\"dep:crossterm_winapi\"]}}", "crossterm_0.28.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"async-std\",\"req\":\"^1.12\"},{\"name\":\"bitflags\",\"req\":\"^2.3\"},{\"name\":\"crossterm_winapi\",\"optional\":true,\"req\":\"^0.9.1\",\"target\":\"cfg(windows)\"},{\"name\":\"filedescriptor\",\"optional\":true,\"req\":\"^0.8\",\"target\":\"cfg(unix)\"},{\"kind\":\"dev\",\"name\":\"futures\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"futures-core\",\"optional\":true,\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"futures-timer\",\"req\":\"^3.0\"},{\"default_features\":false,\"name\":\"libc\",\"optional\":true,\"req\":\"^0.2\",\"target\":\"cfg(unix)\"},{\"features\":[\"os-poll\"],\"name\":\"mio\",\"optional\":true,\"req\":\"^1.0\",\"target\":\"cfg(unix)\"},{\"name\":\"parking_lot\",\"req\":\"^0.12\"},{\"default_features\":false,\"features\":[\"std\",\"stdio\",\"termios\"],\"name\":\"rustix\",\"req\":\"^0.38.34\",\"target\":\"cfg(unix)\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serial_test\",\"req\":\"^2.0.0\"},{\"name\":\"signal-hook\",\"optional\":true,\"req\":\"^0.3.17\",\"target\":\"cfg(unix)\"},{\"features\":[\"support-v1_0\"],\"name\":\"signal-hook-mio\",\"optional\":true,\"req\":\"^0.2.4\",\"target\":\"cfg(unix)\"},{\"kind\":\"dev\",\"name\":\"temp-env\",\"req\":\"^0.3.6\"},{\"features\":[\"full\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.25\"},{\"features\":[\"winuser\",\"winerror\"],\"name\":\"winapi\",\"optional\":true,\"req\":\"^0.3.9\",\"target\":\"cfg(windows)\"}],\"features\":{\"bracketed-paste\":[],\"default\":[\"bracketed-paste\",\"windows\",\"events\"],\"event-stream\":[\"dep:futures-core\",\"events\"],\"events\":[\"dep:mio\",\"dep:signal-hook\",\"dep:signal-hook-mio\"],\"serde\":[\"dep:serde\",\"bitflags/serde\"],\"use-dev-tty\":[\"filedescriptor\",\"rustix/process\"],\"windows\":[\"dep:winapi\",\"dep:crossterm_winapi\"]}}", "crossterm_winapi_0.9.1": "{\"dependencies\":[{\"features\":[\"winbase\",\"consoleapi\",\"processenv\",\"handleapi\",\"synchapi\",\"impl-default\"],\"name\":\"winapi\",\"req\":\"^0.3.8\",\"target\":\"cfg(windows)\"}],\"features\":{}}", - "crypto-bigint_0.5.5": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1\"},{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5\"},{\"default_features\":false,\"name\":\"der\",\"optional\":true,\"req\":\"^0.7\"},{\"name\":\"generic-array\",\"optional\":true,\"req\":\"^0.14\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"num-bigint\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"num-integer\",\"req\":\"^0.1\"},{\"kind\":\"dev\",\"name\":\"num-traits\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"rand_chacha\",\"req\":\"^0.3\"},{\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.6.4\"},{\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"rlp\",\"optional\":true,\"req\":\"^0.5\"},{\"default_features\":false,\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2.4\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"serdect?/alloc\"],\"default\":[\"rand\"],\"extra-sizes\":[],\"rand\":[\"rand_core/std\"],\"serde\":[\"dep:serdect\"]}}", - "crypto-bigint_0.7.0-rc.18": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"rng\"],\"kind\":\"dev\",\"name\":\"chacha20\",\"req\":\"^0.10.0-rc.6\"},{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7\"},{\"name\":\"ctutils\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"der\",\"optional\":true,\"req\":\"^0.8.0-rc.10\"},{\"features\":[\"sys_rng\"],\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.4.0-rc.0\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"hybrid-array\",\"optional\":true,\"req\":\"^0.4.5\"},{\"kind\":\"dev\",\"name\":\"num-bigint\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"num-integer\",\"req\":\"^0.1\"},{\"features\":[\"num-bigint\",\"num-integer\",\"num-traits\"],\"kind\":\"dev\",\"name\":\"num-modular\",\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"num-traits\",\"req\":\"^0.2.19\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.9\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10.0-rc-3\"},{\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.10.0-rc-3\"},{\"default_features\":false,\"name\":\"rlp\",\"optional\":true,\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"subtle\",\"optional\":true,\"req\":\"^2.6\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"serdect?/alloc\"],\"default\":[\"rand_core\"],\"extra-sizes\":[],\"getrandom\":[\"dep:getrandom\",\"rand_core\"],\"rand_core\":[\"dep:rand_core\"],\"serde\":[\"dep:serdect\"],\"subtle\":[\"dep:subtle\",\"ctutils/subtle\",\"hybrid-array?/subtle\"]}}", + "crypto-bigint_0.7.5": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"rng\"],\"kind\":\"dev\",\"name\":\"chacha20\",\"req\":\"^0.10\"},{\"name\":\"cpubits\",\"req\":\"^0.1\"},{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7\",\"target\":\"cfg(any(unix, windows))\"},{\"name\":\"ctutils\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"der\",\"optional\":true,\"req\":\"^0.8\"},{\"features\":[\"sys_rng\"],\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"hybrid-array\",\"optional\":true,\"req\":\"^0.4.12\"},{\"kind\":\"dev\",\"name\":\"num-bigint\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"num-integer\",\"req\":\"^0.1\"},{\"features\":[\"num-bigint\",\"num-integer\",\"num-traits\"],\"kind\":\"dev\",\"name\":\"num-modular\",\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"num-traits\",\"req\":\"^0.2.19\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.11\",\"target\":\"cfg(any(unix, windows))\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"rlp\",\"optional\":true,\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"subtle\",\"optional\":true,\"req\":\"^2.6\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"serdect?/alloc\"],\"default\":[\"rand_core\"],\"der\":[\"dep:der\",\"hybrid-array\"],\"extra-sizes\":[],\"getrandom\":[\"dep:getrandom\",\"rand_core\"],\"rand_core\":[\"dep:rand_core\"],\"serde\":[\"dep:serdect\"],\"subtle\":[\"dep:subtle\",\"ctutils/subtle\",\"hybrid-array?/subtle\"]}}", "crypto-common_0.1.7": "{\"dependencies\":[{\"features\":[\"more_lengths\"],\"name\":\"generic-array\",\"req\":\"=0.14.7\"},{\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.6\"},{\"name\":\"typenum\",\"req\":\"^1.14\"}],\"features\":{\"getrandom\":[\"rand_core/getrandom\"],\"std\":[]}}", - "crypto-common_0.2.1": "{\"dependencies\":[{\"features\":[\"sys_rng\"],\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"hybrid-array\",\"req\":\"^0.4.7\"},{\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"}],\"features\":{\"getrandom\":[\"rand_core\",\"dep:getrandom\"],\"rand_core\":[\"dep:rand_core\"],\"zeroize\":[\"hybrid-array/zeroize\"]}}", - "crypto-primes_0.7.0-pre.6": "{\"dependencies\":[{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5\"},{\"default_features\":false,\"features\":[\"rand_core\"],\"name\":\"crypto-bigint\",\"req\":\"^0.7.0-rc.16\"},{\"default_features\":false,\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"crypto-bigint\",\"req\":\"^0.7.0-pre.16\"},{\"kind\":\"dev\",\"name\":\"float-cmp\",\"req\":\"^0.10\"},{\"name\":\"glass_pumpkin\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"arch\"],\"name\":\"libm\",\"req\":\"^0.2.13\"},{\"kind\":\"dev\",\"name\":\"num-bigint\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"num-integer\",\"req\":\"^0.1\"},{\"features\":[\"num-bigint\"],\"kind\":\"dev\",\"name\":\"num-modular\",\"req\":\"^0.5\"},{\"kind\":\"dev\",\"name\":\"num-prime\",\"req\":\"^0.4.3\"},{\"kind\":\"dev\",\"name\":\"num_cpus\",\"req\":\"^1.16\"},{\"features\":[\"vendored\"],\"name\":\"openssl\",\"optional\":true,\"req\":\"^0.10.39\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"features\":[\"chacha\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.10.0-rc.6\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"rand_chacha_03\",\"package\":\"rand_chacha\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.10.0-rc-3\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"rand_core_06\",\"package\":\"rand_core\",\"req\":\"^0.6.4\"},{\"default_features\":false,\"name\":\"rayon\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"integer\"],\"name\":\"rug\",\"optional\":true,\"req\":\"^1.26\"}],\"features\":{\"multicore\":[\"rayon\"],\"tests-all\":[\"tests-openssl\",\"tests-gmp\",\"tests-exhaustive\",\"tests-glass-pumpkin\"],\"tests-exhaustive\":[],\"tests-glass-pumpkin\":[\"glass_pumpkin\"],\"tests-gmp\":[\"rug/std\"],\"tests-openssl\":[\"openssl\"]}}", - "ctr_0.9.2": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"aes\",\"req\":\"^0.8\"},{\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3.3\"},{\"kind\":\"dev\",\"name\":\"kuznyechik\",\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"magma\",\"req\":\"^0.8\"}],\"features\":{\"alloc\":[\"cipher/alloc\"],\"block-padding\":[\"cipher/block-padding\"],\"std\":[\"cipher/std\",\"alloc\"],\"zeroize\":[\"cipher/zeroize\"]}}", - "ctutils_0.3.2": "{\"dependencies\":[{\"name\":\"cmov\",\"req\":\"=0.5.0-pre.0\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.9\"},{\"default_features\":false,\"name\":\"subtle\",\"optional\":true,\"req\":\"^2\"}],\"features\":{}}", + "crypto-common_0.2.2": "{\"dependencies\":[{\"features\":[\"sys_rng\"],\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"hybrid-array\",\"req\":\"^0.4.7\"},{\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"}],\"features\":{\"getrandom\":[\"rand_core\",\"dep:getrandom\"],\"rand_core\":[\"dep:rand_core\"],\"zeroize\":[\"hybrid-array/zeroize\"]}}", + "crypto-primes_0.7.2": "{\"dependencies\":[{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5\"},{\"default_features\":false,\"features\":[\"rand_core\"],\"name\":\"crypto-bigint\",\"req\":\"^0.7\"},{\"default_features\":false,\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"crypto-bigint\",\"req\":\"^0.7\"},{\"kind\":\"dev\",\"name\":\"float-cmp\",\"req\":\"^0.10\"},{\"name\":\"glass_pumpkin\",\"optional\":true,\"req\":\"^2.0.0-rc.0\"},{\"kind\":\"dev\",\"name\":\"libm\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"num-bigint\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"num-integer\",\"req\":\"^0.1\"},{\"features\":[\"num-bigint\"],\"kind\":\"dev\",\"name\":\"num-modular\",\"req\":\"^0.5\"},{\"kind\":\"dev\",\"name\":\"num-prime\",\"req\":\"^0.4.3\"},{\"kind\":\"dev\",\"name\":\"num_cpus\",\"req\":\"^1.16\"},{\"features\":[\"vendored\"],\"name\":\"openssl\",\"optional\":true,\"req\":\"^0.10.39\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"features\":[\"chacha\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"rayon\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"integer\"],\"name\":\"rug\",\"optional\":true,\"req\":\"^1.26\"}],\"features\":{\"alloc\":[],\"default\":[\"alloc\"],\"multicore\":[\"rayon\"],\"tests-all\":[\"tests-openssl\",\"tests-gmp\",\"tests-exhaustive\",\"tests-glass-pumpkin\"],\"tests-exhaustive\":[],\"tests-glass-pumpkin\":[\"glass_pumpkin\"],\"tests-gmp\":[\"rug/std\"],\"tests-openssl\":[\"openssl\"]}}", + "ctr_0.10.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"aes\",\"req\":\"^0.9\"},{\"features\":[\"stream-wrapper\"],\"name\":\"cipher\",\"req\":\"^0.5.2\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.5.2\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"kuznyechik\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"magma\",\"req\":\"^0.10\"}],\"features\":{\"alloc\":[\"cipher/alloc\"],\"block-padding\":[\"cipher/block-padding\"],\"zeroize\":[\"cipher/zeroize\"]}}", + "ctutils_0.4.2": "{\"dependencies\":[{\"name\":\"cmov\",\"req\":\"^0.5.3\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.11\"},{\"default_features\":false,\"name\":\"subtle\",\"optional\":true,\"req\":\"^2\"}],\"features\":{\"alloc\":[],\"subtle\":[\"dep:subtle\"]}}", "curve25519-dalek-derive_0.1.1": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1.0.66\"},{\"name\":\"quote\",\"req\":\"^1.0.31\"},{\"features\":[\"full\"],\"name\":\"syn\",\"req\":\"^2.0.27\"}],\"features\":{}}", - "curve25519-dalek_4.1.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1\"},{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"name\":\"cpufeatures\",\"req\":\"^0.2.6\",\"target\":\"cfg(target_arch = \\\"x86_64\\\")\"},{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5\"},{\"name\":\"curve25519-dalek-derive\",\"req\":\"^0.1\",\"target\":\"cfg(all(not(curve25519_dalek_backend = \\\"fiat\\\"), not(curve25519_dalek_backend = \\\"serial\\\"), target_arch = \\\"x86_64\\\"))\"},{\"default_features\":false,\"name\":\"digest\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"ff\",\"optional\":true,\"req\":\"^0.13\"},{\"default_features\":false,\"name\":\"fiat-crypto\",\"req\":\"^0.2.1\",\"target\":\"cfg(curve25519_dalek_backend = \\\"fiat\\\")\"},{\"default_features\":false,\"name\":\"group\",\"optional\":true,\"req\":\"^0.13\"},{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.2\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.6.4\"},{\"default_features\":false,\"features\":[\"getrandom\"],\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.6\"},{\"kind\":\"build\",\"name\":\"rustc_version\",\"req\":\"^0.4.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2.3.0\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"zeroize?/alloc\"],\"default\":[\"alloc\",\"precomputed-tables\",\"zeroize\"],\"group\":[\"dep:group\",\"rand_core\"],\"group-bits\":[\"group\",\"ff/bits\"],\"legacy_compatibility\":[],\"precomputed-tables\":[]}}", + "curve25519-dalek_5.0.0-rc.0": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"name\":\"cpufeatures\",\"req\":\"^0.3\",\"target\":\"cfg(target_arch = \\\"x86_64\\\")\"},{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5\"},{\"name\":\"curve25519-dalek-derive\",\"req\":\"^0.1\",\"target\":\"cfg(all(not(curve25519_dalek_backend = \\\"fiat\\\"), not(curve25519_dalek_backend = \\\"serial\\\"), target_arch = \\\"x86_64\\\"))\"},{\"default_features\":false,\"features\":[\"block-api\"],\"name\":\"digest\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"fiat-crypto\",\"req\":\"^0.3.0\",\"target\":\"cfg(curve25519_dalek_backend = \\\"fiat\\\")\"},{\"features\":[\"sys_rng\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.2\"},{\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"postcard\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"},{\"kind\":\"build\",\"name\":\"rustc_version\",\"req\":\"^0.4.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.11\"},{\"default_features\":false,\"features\":[\"const-generics\"],\"name\":\"subtle\",\"req\":\"^2.6.0\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"zeroize?/alloc\"],\"default\":[\"alloc\",\"precomputed-tables\",\"zeroize\"],\"digest\":[\"dep:digest\"],\"legacy_compatibility\":[],\"lizard\":[\"digest\"],\"precomputed-tables\":[]}}", "darling_0.20.11": "{\"dependencies\":[{\"name\":\"darling_core\",\"req\":\"=0.20.11\"},{\"name\":\"darling_macro\",\"req\":\"=0.20.11\"},{\"kind\":\"dev\",\"name\":\"proc-macro2\",\"req\":\"^1.0.86\"},{\"kind\":\"dev\",\"name\":\"quote\",\"req\":\"^1.0.18\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1.0.9\",\"target\":\"cfg(compiletests)\"},{\"kind\":\"dev\",\"name\":\"syn\",\"req\":\"^2.0.15\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.89\",\"target\":\"cfg(compiletests)\"}],\"features\":{\"default\":[\"suggestions\"],\"diagnostics\":[\"darling_core/diagnostics\"],\"suggestions\":[\"darling_core/suggestions\"]}}", "darling_core_0.20.11": "{\"dependencies\":[{\"name\":\"fnv\",\"req\":\"^1.0.7\"},{\"name\":\"ident_case\",\"req\":\"^1.0.1\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.86\"},{\"name\":\"quote\",\"req\":\"^1.0.18\"},{\"name\":\"strsim\",\"optional\":true,\"req\":\"^0.11.1\"},{\"features\":[\"full\",\"extra-traits\"],\"name\":\"syn\",\"req\":\"^2.0.15\"}],\"features\":{\"diagnostics\":[],\"suggestions\":[\"strsim\"]}}", "darling_macro_0.20.11": "{\"dependencies\":[{\"name\":\"darling_core\",\"req\":\"=0.20.11\"},{\"name\":\"quote\",\"req\":\"^1.0.18\"},{\"name\":\"syn\",\"req\":\"^2.0.15\"}],\"features\":{}}", @@ -720,6 +720,7 @@ "derive_builder_0.20.2": "{\"dependencies\":[{\"name\":\"derive_builder_macro\",\"req\":\"=0.20.2\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1.0.4\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.38\",\"target\":\"cfg(compiletests)\"}],\"features\":{\"alloc\":[\"derive_builder_macro/alloc\"],\"clippy\":[\"derive_builder_macro/clippy\"],\"default\":[\"std\"],\"std\":[\"derive_builder_macro/lib_has_std\"]}}", "derive_builder_core_0.20.2": "{\"dependencies\":[{\"name\":\"darling\",\"req\":\"^0.20.10\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.37\"},{\"name\":\"quote\",\"req\":\"^1.0.35\"},{\"features\":[\"full\",\"extra-traits\"],\"name\":\"syn\",\"req\":\"^2.0.15\"}],\"features\":{\"alloc\":[],\"clippy\":[],\"lib_has_std\":[]}}", "derive_builder_macro_0.20.2": "{\"dependencies\":[{\"name\":\"derive_builder_core\",\"req\":\"=0.20.2\"},{\"features\":[\"full\",\"extra-traits\"],\"name\":\"syn\",\"req\":\"^2.0.15\"}],\"features\":{\"alloc\":[\"derive_builder_core/alloc\"],\"clippy\":[\"derive_builder_core/clippy\"],\"lib_has_std\":[\"derive_builder_core/lib_has_std\"]}}", + "des_0.9.0": "{\"dependencies\":[{\"name\":\"cipher\",\"req\":\"^0.5\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.5\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"}],\"features\":{\"zeroize\":[\"cipher/zeroize\"]}}", "dialoguer_0.11.0": "{\"dependencies\":[{\"name\":\"console\",\"req\":\"^0.15.0\"},{\"name\":\"fuzzy-matcher\",\"optional\":true,\"req\":\"^0.3.7\"},{\"name\":\"shell-words\",\"req\":\"^1.1.0\"},{\"name\":\"tempfile\",\"optional\":true,\"req\":\"^3\"},{\"name\":\"thiserror\",\"req\":\"^1.0.40\"},{\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.1.1\"}],\"features\":{\"completion\":[],\"default\":[\"editor\",\"password\"],\"editor\":[\"tempfile\"],\"fuzzy-select\":[\"fuzzy-matcher\"],\"history\":[],\"password\":[\"zeroize\"]}}", "digest_0.10.7": "{\"dependencies\":[{\"name\":\"blobby\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"block-buffer\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"const-oid\",\"optional\":true,\"req\":\"^0.9\"},{\"name\":\"crypto-common\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"name\":\"subtle\",\"optional\":true,\"req\":\"^2.4\"}],\"features\":{\"alloc\":[],\"core-api\":[\"block-buffer\"],\"default\":[\"core-api\"],\"dev\":[\"blobby\"],\"mac\":[\"subtle\"],\"oid\":[\"const-oid\"],\"rand_core\":[\"crypto-common/rand_core\"],\"std\":[\"alloc\",\"crypto-common/std\"]}}", "digest_0.11.2": "{\"dependencies\":[{\"name\":\"blobby\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"block-buffer\",\"optional\":true,\"req\":\"^0.12\"},{\"name\":\"common\",\"package\":\"crypto-common\",\"req\":\"^0.2\"},{\"name\":\"const-oid\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"ctutils\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.11.0-rc.5\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.7\"}],\"features\":{\"alloc\":[],\"block-api\":[\"dep:block-buffer\"],\"default\":[\"block-api\"],\"dev\":[\"blobby\"],\"getrandom\":[\"common/getrandom\",\"rand_core\"],\"mac\":[\"dep:ctutils\"],\"oid\":[\"dep:const-oid\"],\"rand_core\":[\"common/rand_core\"],\"zeroize\":[\"dep:zeroize\",\"block-buffer?/zeroize\"]}}", @@ -727,11 +728,11 @@ "dotenvy_0.15.7": "{\"dependencies\":[{\"name\":\"clap\",\"optional\":true,\"req\":\"^3.2\"},{\"kind\":\"dev\",\"name\":\"once_cell\",\"req\":\"^1.16.0\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.3.0\"}],\"features\":{\"cli\":[\"clap\"]}}", "dunce_1.0.5": "{\"dependencies\":[],\"features\":{}}", "dyn-clone_1.0.20": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1.0\"},{\"features\":[\"diff\"],\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.66\"}],\"features\":{}}", - "ecdsa_0.16.9": "{\"dependencies\":[{\"name\":\"der\",\"optional\":true,\"req\":\"^0.7\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"digest\",\"optional\":true,\"req\":\"^0.10.7\"},{\"default_features\":false,\"features\":[\"digest\",\"sec1\"],\"name\":\"elliptic-curve\",\"req\":\"^0.13.6\"},{\"default_features\":false,\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"elliptic-curve\",\"req\":\"^0.13\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4\"},{\"name\":\"rfc6979\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.10\"},{\"default_features\":false,\"features\":[\"rand_core\"],\"name\":\"signature\",\"req\":\"^2.0, <2.3\"},{\"default_features\":false,\"name\":\"spki\",\"optional\":true,\"req\":\"^0.7.2\"}],\"features\":{\"alloc\":[\"elliptic-curve/alloc\",\"signature/alloc\",\"spki/alloc\"],\"arithmetic\":[\"elliptic-curve/arithmetic\"],\"default\":[\"digest\"],\"dev\":[\"arithmetic\",\"digest\",\"elliptic-curve/dev\",\"hazmat\"],\"digest\":[\"dep:digest\",\"signature/digest\"],\"hazmat\":[],\"pem\":[\"elliptic-curve/pem\",\"pkcs8\"],\"pkcs8\":[\"digest\",\"elliptic-curve/pkcs8\",\"der\"],\"serde\":[\"elliptic-curve/serde\",\"serdect\"],\"signing\":[\"arithmetic\",\"digest\",\"hazmat\",\"rfc6979\"],\"std\":[\"alloc\",\"elliptic-curve/std\",\"signature/std\"],\"verifying\":[\"arithmetic\",\"digest\",\"hazmat\"]}}", - "ed25519-dalek_2.2.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"blake2\",\"req\":\"^0.10\"},{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5\"},{\"default_features\":false,\"features\":[\"digest\"],\"name\":\"curve25519-dalek\",\"req\":\"^4\"},{\"default_features\":false,\"features\":[\"digest\",\"rand_core\"],\"kind\":\"dev\",\"name\":\"curve25519-dalek\",\"req\":\"^4\"},{\"default_features\":false,\"name\":\"ed25519\",\"req\":\">=2.2, <2.3\"},{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"merlin\",\"optional\":true,\"req\":\"^3\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.6.4\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.6.4\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"sha2\",\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"sha3\",\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"signature\",\"optional\":true,\"req\":\">=2.0, <2.3\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2.3.0\"},{\"kind\":\"dev\",\"name\":\"toml\",\"req\":\"^0.7\"},{\"default_features\":false,\"features\":[\"static_secrets\"],\"kind\":\"dev\",\"name\":\"x25519-dalek\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.5\"}],\"features\":{\"alloc\":[\"curve25519-dalek/alloc\",\"ed25519/alloc\",\"serde?/alloc\",\"zeroize/alloc\"],\"asm\":[\"sha2/asm\"],\"batch\":[\"alloc\",\"merlin\",\"rand_core\"],\"default\":[\"fast\",\"std\",\"zeroize\"],\"digest\":[\"signature/digest\"],\"fast\":[\"curve25519-dalek/precomputed-tables\"],\"hazmat\":[],\"legacy_compatibility\":[\"curve25519-dalek/legacy_compatibility\"],\"pem\":[\"alloc\",\"ed25519/pem\",\"pkcs8\"],\"pkcs8\":[\"ed25519/pkcs8\"],\"rand_core\":[\"dep:rand_core\"],\"serde\":[\"dep:serde\",\"ed25519/serde\"],\"std\":[\"alloc\",\"ed25519/std\",\"serde?/std\",\"sha2/std\"],\"zeroize\":[\"dep:zeroize\",\"curve25519-dalek/zeroize\"]}}", - "ed25519_2.2.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1\"},{\"features\":[\"rand_core\"],\"kind\":\"dev\",\"name\":\"ed25519-dalek\",\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4\"},{\"name\":\"pkcs8\",\"optional\":true,\"req\":\"^0.10\"},{\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.6\"},{\"default_features\":false,\"features\":[\"signature\"],\"kind\":\"dev\",\"name\":\"ring-compat\",\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"serde_bytes\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"signature\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"pkcs8?/alloc\"],\"default\":[\"std\"],\"pem\":[\"alloc\",\"pkcs8/pem\"],\"serde_bytes\":[\"serde\",\"dep:serde_bytes\"],\"std\":[\"pkcs8?/std\",\"signature/std\"]}}", + "ecdsa_0.17.0-rc.18": "{\"dependencies\":[{\"name\":\"der\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"digest\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"features\":[\"sec1\"],\"name\":\"elliptic-curve\",\"req\":\"^0.14.0-rc.32\"},{\"default_features\":false,\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"elliptic-curve\",\"req\":\"^0.14.0-rc.32\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"rfc6979\",\"optional\":true,\"req\":\"^0.5.0-rc.5\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.11\"},{\"default_features\":false,\"features\":[\"rand_core\"],\"name\":\"signature\",\"req\":\"^3.0.0-rc.10\"},{\"default_features\":false,\"name\":\"spki\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"zeroize\",\"req\":\"^1.5\"}],\"features\":{\"algorithm\":[\"dep:rfc6979\",\"digest\",\"elliptic-curve/arithmetic\",\"hazmat\"],\"alloc\":[\"elliptic-curve/alloc\",\"signature/alloc\",\"spki/alloc\"],\"default\":[\"digest\"],\"der\":[\"dep:der\"],\"dev\":[\"algorithm\",\"digest/dev\",\"elliptic-curve/dev\"],\"digest\":[\"dep:digest\",\"elliptic-curve/digest\",\"signature/digest\"],\"getrandom\":[\"elliptic-curve/getrandom\"],\"hazmat\":[],\"pem\":[\"elliptic-curve/pem\",\"pkcs8\"],\"pkcs8\":[\"der\",\"digest\",\"elliptic-curve/pkcs8\"],\"serde\":[\"dep:serdect\",\"elliptic-curve/serde\",\"pkcs8\"],\"std\":[\"alloc\",\"elliptic-curve/std\"]}}", + "ed25519-dalek_3.0.0-rc.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"blake2\",\"req\":\"^0.11.0-rc.6\"},{\"default_features\":false,\"features\":[\"rng\"],\"kind\":\"dev\",\"name\":\"chacha20\",\"req\":\"^0.10\"},{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5\"},{\"default_features\":false,\"features\":[\"digest\"],\"name\":\"curve25519-dalek\",\"req\":\"^5.0.0-rc.0\"},{\"default_features\":false,\"features\":[\"digest\",\"rand_core\"],\"kind\":\"dev\",\"name\":\"curve25519-dalek\",\"req\":\"^5.0.0-rc.0\"},{\"default_features\":false,\"name\":\"ed25519\",\"req\":\"^3\"},{\"features\":[\"sys_rng\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"keccak\",\"optional\":true,\"req\":\"^0.2\"},{\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"postcard\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"sha2\",\"req\":\"^0.11\"},{\"kind\":\"dev\",\"name\":\"sha3\",\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"signature\",\"optional\":true,\"req\":\"^3\"},{\"name\":\"strobe-rs\",\"optional\":true,\"req\":\"^0.13\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2.3.0\"},{\"kind\":\"dev\",\"name\":\"toml\",\"req\":\"^0.9\"},{\"default_features\":false,\"features\":[\"static_secrets\"],\"kind\":\"dev\",\"name\":\"x25519-dalek\",\"req\":\"^3.0.0-rc.0\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.5\"}],\"features\":{\"alloc\":[\"curve25519-dalek/alloc\",\"ed25519/alloc\",\"signature/alloc\",\"serde?/alloc\",\"zeroize?/alloc\"],\"batch\":[\"alloc\",\"dep:keccak\",\"rand_core\",\"strobe-rs\"],\"default\":[\"fast\",\"zeroize\"],\"digest\":[\"signature/digest\"],\"fast\":[\"curve25519-dalek/precomputed-tables\"],\"hazmat\":[],\"legacy_compatibility\":[\"curve25519-dalek/legacy_compatibility\"],\"pem\":[\"alloc\",\"ed25519/pem\",\"pkcs8\"],\"pkcs8\":[\"ed25519/pkcs8\"],\"rand_core\":[\"dep:rand_core\"],\"serde\":[\"dep:serde\",\"ed25519/serde\"],\"zeroize\":[\"dep:zeroize\",\"curve25519-dalek/zeroize\"]}}", + "ed25519_3.0.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"pkcs8\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"signature\",\"req\":\"^3\"},{\"features\":[\"derive\"],\"name\":\"zerocopy\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"pkcs8?/alloc\",\"signature/alloc\"],\"default\":[\"alloc\"],\"pem\":[\"alloc\",\"pkcs8/pem\"],\"serde\":[\"dep:serdect\"]}}", "either_1.15.0": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"alloc\",\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.95\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.0\"}],\"features\":{\"default\":[\"std\"],\"std\":[],\"use_std\":[\"std\"]}}", - "elliptic-curve_0.13.8": "{\"dependencies\":[{\"name\":\"base16ct\",\"req\":\"^0.2\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"base64ct\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"rand_core\",\"generic-array\",\"zeroize\"],\"name\":\"crypto-bigint\",\"req\":\"^0.5\"},{\"name\":\"digest\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"ff\",\"optional\":true,\"req\":\"^0.13\"},{\"default_features\":false,\"features\":[\"zeroize\"],\"name\":\"generic-array\",\"req\":\"^0.14.6\"},{\"default_features\":false,\"name\":\"group\",\"optional\":true,\"req\":\"^0.13\"},{\"name\":\"hex-literal\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"hkdf\",\"optional\":true,\"req\":\"^0.12.1\"},{\"features\":[\"alloc\"],\"name\":\"pem-rfc7468\",\"optional\":true,\"req\":\"^0.7\"},{\"default_features\":false,\"name\":\"pkcs8\",\"optional\":true,\"req\":\"^0.10.2\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.6.4\"},{\"features\":[\"subtle\",\"zeroize\"],\"name\":\"sec1\",\"optional\":true,\"req\":\"^0.7.1\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"serde_json\",\"optional\":true,\"req\":\"^1.0.47\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"sha3\",\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"tap\",\"optional\":true,\"req\":\"^1.0.1\"},{\"default_features\":false,\"name\":\"zeroize\",\"req\":\"^1.7\"}],\"features\":{\"alloc\":[\"base16ct/alloc\",\"ff?/alloc\",\"group?/alloc\",\"pkcs8?/alloc\",\"sec1?/alloc\",\"zeroize/alloc\"],\"arithmetic\":[\"group\"],\"bits\":[\"arithmetic\",\"ff/bits\",\"dep:tap\"],\"default\":[\"arithmetic\"],\"dev\":[\"arithmetic\",\"dep:hex-literal\",\"pem\",\"pkcs8\"],\"ecdh\":[\"arithmetic\",\"digest\",\"dep:hkdf\"],\"group\":[\"dep:group\",\"ff\"],\"hash2curve\":[\"arithmetic\",\"digest\"],\"hazmat\":[],\"jwk\":[\"dep:base64ct\",\"dep:serde_json\",\"alloc\",\"serde\",\"zeroize/alloc\"],\"pem\":[\"dep:pem-rfc7468\",\"alloc\",\"arithmetic\",\"pkcs8\",\"sec1/pem\"],\"pkcs8\":[\"dep:pkcs8\",\"sec1\"],\"serde\":[\"dep:serdect\",\"alloc\",\"pkcs8\",\"sec1/serde\"],\"std\":[\"alloc\",\"rand_core/std\",\"pkcs8?/std\",\"sec1?/std\"],\"voprf\":[\"digest\"]}}", + "elliptic-curve_0.14.0-rc.33": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"zeroize\"],\"name\":\"array\",\"package\":\"hybrid-array\",\"req\":\"^0.4\"},{\"name\":\"base16ct\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"hybrid-array\",\"rand_core\",\"subtle\",\"zeroize\"],\"name\":\"bigint\",\"package\":\"crypto-bigint\",\"req\":\"^0.7\"},{\"features\":[\"rand_core\"],\"name\":\"common\",\"package\":\"crypto-common\",\"req\":\"^0.2\"},{\"name\":\"digest\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"ff\",\"optional\":true,\"req\":\"^0.14\"},{\"default_features\":false,\"name\":\"group\",\"optional\":true,\"req\":\"^0.14\"},{\"name\":\"hex-literal\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"hkdf\",\"optional\":true,\"req\":\"^0.13\"},{\"default_features\":false,\"name\":\"once_cell\",\"optional\":true,\"req\":\"^1.21\"},{\"features\":[\"alloc\"],\"name\":\"pem-rfc7468\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"name\":\"pkcs8\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.10\"},{\"features\":[\"ctutils\",\"subtle\",\"zeroize\"],\"name\":\"sec1\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2.6\"},{\"default_features\":false,\"name\":\"zeroize\",\"req\":\"^1.7\"}],\"features\":{\"alloc\":[\"base16ct/alloc\",\"ff?/alloc\",\"group?/alloc\",\"array/alloc\",\"pkcs8?/alloc\",\"sec1?/alloc\",\"zeroize/alloc\"],\"arithmetic\":[\"group\"],\"basepoint-table\":[\"arithmetic\"],\"critical-section\":[\"basepoint-table\",\"once_cell/critical-section\"],\"default\":[\"arithmetic\"],\"dev\":[\"arithmetic\",\"dep:hex-literal\",\"pem\",\"pkcs8\"],\"ecdh\":[\"arithmetic\",\"digest\",\"dep:hkdf\"],\"getrandom\":[\"arithmetic\",\"bigint/getrandom\",\"common/getrandom\"],\"group\":[\"dep:group\",\"ff\"],\"pem\":[\"dep:pem-rfc7468\",\"alloc\",\"arithmetic\",\"pkcs8/pem\",\"sec1/pem\"],\"pkcs8\":[\"dep:pkcs8\",\"sec1\"],\"serde\":[\"dep:serdect\",\"alloc\",\"pkcs8\",\"sec1/serde\"],\"std\":[\"alloc\",\"once_cell?/std\",\"pkcs8?/std\",\"sec1?/std\"]}}", "encode_unicode_1.0.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"ascii\",\"optional\":true,\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"lazy_static\",\"req\":\"^1.0\",\"target\":\"cfg(unix)\"},{\"features\":[\"https-native\"],\"kind\":\"dev\",\"name\":\"minreq\",\"req\":\"^2.6\"}],\"features\":{\"default\":[\"std\"],\"std\":[]}}", "enum_dispatch_0.3.13": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"custom_derive\",\"req\":\"=0.1.7\"},{\"kind\":\"dev\",\"name\":\"enum_derive\",\"req\":\"=0.1.7\"},{\"name\":\"once_cell\",\"req\":\"^1.0.1\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0\"},{\"name\":\"quote\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\">=0.5.5, <=0.6.1\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"=1.0.136\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"=1.0.78\"},{\"kind\":\"dev\",\"name\":\"smol\",\"req\":\"^1.3.0\"},{\"features\":[\"full\"],\"name\":\"syn\",\"req\":\"^2.0\"}],\"features\":{}}", "enumflags2_0.7.12": "{\"dependencies\":[{\"name\":\"enumflags2_derive\",\"req\":\"=0.7.12\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.0\"}],\"features\":{\"std\":[]}}", @@ -745,8 +746,8 @@ "fallible-iterator_0.2.0": "{\"dependencies\":[],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[]}}", "fastrand_2.3.0": "{\"dependencies\":[{\"features\":[\"js\"],\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.2\",\"target\":\"cfg(all(any(target_arch = \\\"wasm32\\\", target_arch = \\\"wasm64\\\"), target_os = \\\"unknown\\\"))\"},{\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.2\"},{\"features\":[\"js\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.2\",\"target\":\"cfg(all(any(target_arch = \\\"wasm32\\\", target_arch = \\\"wasm64\\\"), target_os = \\\"unknown\\\"))\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\",\"target\":\"cfg(all(any(target_arch = \\\"wasm32\\\", target_arch = \\\"wasm64\\\"), target_os = \\\"unknown\\\"))\"},{\"kind\":\"dev\",\"name\":\"wyhash\",\"req\":\"^0.5\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"js\":[\"std\",\"getrandom\"],\"std\":[\"alloc\"]}}", "fastrand_2.4.1": "{\"dependencies\":[{\"features\":[\"wasm_js\"],\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.3.4\",\"target\":\"cfg(all(any(target_arch = \\\"wasm32\\\", target_arch = \\\"wasm64\\\"), target_os = \\\"unknown\\\"))\"},{\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.3.4\"},{\"features\":[\"wasm_js\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.3.4\",\"target\":\"cfg(all(any(target_arch = \\\"wasm32\\\", target_arch = \\\"wasm64\\\"), target_os = \\\"unknown\\\"))\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\",\"target\":\"cfg(all(any(target_arch = \\\"wasm32\\\", target_arch = \\\"wasm64\\\"), target_os = \\\"unknown\\\"))\"},{\"kind\":\"dev\",\"name\":\"wyhash\",\"req\":\"^0.6\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"js\":[\"std\",\"getrandom\"],\"std\":[\"alloc\"]}}", - "ff_0.13.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"bitvec\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"blake2b_simd\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"byteorder\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"ff_derive\",\"optional\":true,\"req\":\"^0.13.1\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.6\"},{\"default_features\":false,\"features\":[\"i128\"],\"name\":\"subtle\",\"req\":\"^2.2.1\"}],\"features\":{\"alloc\":[],\"bits\":[\"bitvec\"],\"default\":[\"bits\",\"std\"],\"derive\":[\"byteorder\",\"ff_derive\"],\"derive_bits\":[\"bits\",\"ff_derive/bits\"],\"std\":[\"alloc\"]}}", - "fiat-crypto_0.2.9": "{\"dependencies\":[],\"features\":{\"default\":[\"std\"],\"std\":[]}}", + "ff_0.14.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"bitvec\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"blake2b_simd\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"byteorder\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"ff_derive\",\"optional\":true,\"req\":\"^0.14\"},{\"features\":[\"sys_rng\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.10\"},{\"default_features\":false,\"features\":[\"i128\"],\"name\":\"subtle\",\"req\":\"^2.2.1\"}],\"features\":{\"alloc\":[],\"bits\":[\"bitvec\",\"ff_derive?/bits\"],\"default\":[\"bits\",\"std\"],\"derive\":[\"byteorder\",\"ff_derive\"],\"std\":[\"alloc\"]}}", + "fiat-crypto_0.3.0": "{\"dependencies\":[],\"features\":{\"default\":[\"std\"],\"std\":[]}}", "filetime_0.2.27": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1.0.0\"},{\"name\":\"libc\",\"req\":\"^0.2.27\",\"target\":\"cfg(unix)\"},{\"name\":\"libredox\",\"req\":\"^0.1.0\",\"target\":\"cfg(target_os = \\\"redox\\\")\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"}],\"features\":{}}", "filetime_0.2.29": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1.0.0\"},{\"name\":\"libc\",\"req\":\"^0.2.27\",\"target\":\"cfg(unix)\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"}],\"features\":{}}", "find-msvc-tools_0.1.9": "{\"dependencies\":[],\"features\":{}}", @@ -775,13 +776,13 @@ "getrandom_0.3.4": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3.77\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"), target_feature = \\\"atomics\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), not(any(all(target_os = \\\"linux\\\", target_env = \\\"\\\"), getrandom_backend = \\\"custom\\\", getrandom_backend = \\\"linux_raw\\\", getrandom_backend = \\\"rdrand\\\", getrandom_backend = \\\"rndr\\\"))))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(any(target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"hurd\\\", target_os = \\\"illumos\\\", target_os = \\\"cygwin\\\", all(target_os = \\\"horizon\\\", target_arch = \\\"arm\\\")))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(any(target_os = \\\"haiku\\\", target_os = \\\"redox\\\", target_os = \\\"nto\\\", target_os = \\\"aix\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(any(target_os = \\\"ios\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\", target_os = \\\"tvos\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(any(target_os = \\\"macos\\\", target_os = \\\"openbsd\\\", target_os = \\\"vita\\\", target_os = \\\"emscripten\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(target_os = \\\"netbsd\\\")\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(target_os = \\\"solaris\\\")\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(target_os = \\\"vxworks\\\")\"},{\"default_features\":false,\"name\":\"r-efi\",\"req\":\"^5.1\",\"target\":\"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\"},{\"default_features\":false,\"name\":\"wasip2\",\"req\":\"^1\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p2\\\"))\"},{\"default_features\":false,\"name\":\"wasm-bindgen\",\"optional\":true,\"req\":\"^0.2.98\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"}],\"features\":{\"std\":[],\"wasm_js\":[\"dep:wasm-bindgen\",\"dep:js-sys\"]}}", "getrandom_0.4.2": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3.77\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"), target_feature = \\\"atomics\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), not(any(all(target_os = \\\"linux\\\", target_env = \\\"\\\"), getrandom_backend = \\\"custom\\\", getrandom_backend = \\\"linux_raw\\\", getrandom_backend = \\\"rdrand\\\", getrandom_backend = \\\"rndr\\\"))))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(any(target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"hurd\\\", target_os = \\\"illumos\\\", target_os = \\\"cygwin\\\", all(target_os = \\\"horizon\\\", target_arch = \\\"arm\\\")))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(any(target_os = \\\"haiku\\\", target_os = \\\"redox\\\", target_os = \\\"nto\\\", target_os = \\\"aix\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(any(target_os = \\\"ios\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\", target_os = \\\"tvos\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(any(target_os = \\\"macos\\\", target_os = \\\"openbsd\\\", target_os = \\\"vita\\\", target_os = \\\"emscripten\\\"))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(target_os = \\\"netbsd\\\")\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(target_os = \\\"solaris\\\")\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.154\",\"target\":\"cfg(target_os = \\\"vxworks\\\")\"},{\"default_features\":false,\"name\":\"r-efi\",\"req\":\"^6\",\"target\":\"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\"},{\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10.0\"},{\"default_features\":false,\"name\":\"wasip2\",\"req\":\"^1\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p2\\\"))\"},{\"name\":\"wasip3\",\"req\":\"^0.4\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p3\\\"))\"},{\"default_features\":false,\"name\":\"wasm-bindgen\",\"optional\":true,\"req\":\"^0.2.98\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"}],\"features\":{\"std\":[],\"sys_rng\":[\"dep:rand_core\"],\"wasm_js\":[\"dep:wasm-bindgen\",\"dep:js-sys\"]}}", "getset_0.1.6": "{\"dependencies\":[{\"name\":\"proc-macro-error2\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"},{\"name\":\"syn\",\"req\":\"^2\"}],\"features\":{}}", - "ghash_0.5.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3\"},{\"name\":\"opaque-debug\",\"req\":\"^0.3\"},{\"name\":\"polyval\",\"req\":\"^0.6.2\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"std\":[\"polyval/std\"]}}", + "ghash_0.6.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"features\":[\"hazmat\"],\"name\":\"polyval\",\"req\":\"^0.7\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"zeroize\":[\"polyval/zeroize\",\"dep:zeroize\"]}}", "gimli_0.26.2": "{\"dependencies\":[{\"name\":\"alloc\",\"optional\":true,\"package\":\"rustc-std-workspace-alloc\",\"req\":\"^1.0.0\"},{\"name\":\"compiler_builtins\",\"optional\":true,\"req\":\"^0.1.2\"},{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"crossbeam\",\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"fallible-iterator\",\"optional\":true,\"req\":\"^0.2.0\"},{\"kind\":\"dev\",\"name\":\"getopts\",\"req\":\"^0.2\"},{\"name\":\"indexmap\",\"optional\":true,\"req\":\"^1.0.2\"},{\"kind\":\"dev\",\"name\":\"memmap2\",\"req\":\"^0.5.5\"},{\"kind\":\"dev\",\"name\":\"num_cpus\",\"req\":\"^1\"},{\"features\":[\"wasm\"],\"kind\":\"dev\",\"name\":\"object\",\"req\":\"^0.29.0\"},{\"kind\":\"dev\",\"name\":\"rayon\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"regex\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"stable_deref_trait\",\"optional\":true,\"req\":\"^1.1.0\"},{\"kind\":\"dev\",\"name\":\"test-assembler\",\"req\":\"^0.1.3\"},{\"kind\":\"dev\",\"name\":\"typed-arena\",\"req\":\"^2\"}],\"features\":{\"default\":[\"read\",\"write\",\"std\",\"fallible-iterator\",\"endian-reader\"],\"endian-reader\":[\"read\",\"stable_deref_trait\"],\"read\":[\"read-core\"],\"read-core\":[],\"rustc-dep-of-std\":[\"core\",\"alloc\",\"compiler_builtins\"],\"std\":[\"fallible-iterator/std\",\"stable_deref_trait/std\"],\"write\":[\"indexmap\"]}}", "gimli_0.32.3": "{\"dependencies\":[{\"name\":\"alloc\",\"optional\":true,\"package\":\"rustc-std-workspace-alloc\",\"req\":\"^1.0.0\"},{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"},{\"default_features\":false,\"name\":\"fallible-iterator\",\"optional\":true,\"req\":\"^0.3.0\"},{\"name\":\"indexmap\",\"optional\":true,\"req\":\"^2.0.0\"},{\"default_features\":false,\"name\":\"stable_deref_trait\",\"optional\":true,\"req\":\"^1.1.0\"},{\"kind\":\"dev\",\"name\":\"test-assembler\",\"req\":\"^0.1.3\"}],\"features\":{\"default\":[\"read-all\",\"write\"],\"endian-reader\":[\"read\",\"dep:stable_deref_trait\"],\"fallible-iterator\":[\"dep:fallible-iterator\"],\"read\":[\"read-core\"],\"read-all\":[\"read\",\"std\",\"fallible-iterator\",\"endian-reader\"],\"read-core\":[],\"rustc-dep-of-std\":[\"dep:core\",\"dep:alloc\"],\"std\":[\"fallible-iterator?/std\",\"stable_deref_trait?/std\"],\"write\":[\"dep:indexmap\"]}}", "glob_0.3.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"tempdir\",\"req\":\"^0.3\"}],\"features\":{}}", "globset_0.4.18": "{\"dependencies\":[{\"name\":\"aho-corasick\",\"req\":\"^1.1.1\"},{\"features\":[\"derive\"],\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.3.2\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"bstr\",\"req\":\"^1.6.2\"},{\"kind\":\"dev\",\"name\":\"glob\",\"req\":\"^0.3.1\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.20\"},{\"default_features\":false,\"features\":[\"std\",\"perf\",\"syntax\",\"meta\",\"nfa\",\"hybrid\"],\"name\":\"regex-automata\",\"req\":\"^0.4.0\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"regex-syntax\",\"req\":\"^0.8.0\"},{\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.188\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.107\"}],\"features\":{\"arbitrary\":[\"dep:arbitrary\"],\"default\":[\"log\"],\"serde1\":[\"serde\"],\"simd-accel\":[]}}", "goblin_0.10.5": "{\"dependencies\":[{\"default_features\":false,\"name\":\"log\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"plain\",\"req\":\"^0.2.3\"},{\"default_features\":false,\"name\":\"scroll\",\"req\":\"^0.13\"},{\"kind\":\"dev\",\"name\":\"stderrlog\",\"req\":\"^0.6.0\"}],\"features\":{\"alloc\":[\"scroll/derive\",\"log\"],\"archive\":[\"alloc\"],\"default\":[\"std\",\"elf32\",\"elf64\",\"mach32\",\"mach64\",\"pe32\",\"pe64\",\"te\",\"archive\",\"endian_fd\"],\"elf32\":[],\"elf64\":[],\"endian_fd\":[\"alloc\"],\"mach32\":[\"alloc\",\"endian_fd\",\"archive\"],\"mach64\":[\"alloc\",\"endian_fd\",\"archive\"],\"pe32\":[\"alloc\",\"endian_fd\"],\"pe64\":[\"alloc\",\"endian_fd\"],\"std\":[\"alloc\",\"scroll/std\"],\"te\":[\"alloc\",\"endian_fd\"]}}", - "group_0.13.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"ff\",\"req\":\"^0.13\"},{\"name\":\"memuse\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"rand\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.6\"},{\"name\":\"rand_xorshift\",\"optional\":true,\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2.2.1\"}],\"features\":{\"alloc\":[],\"default\":[\"alloc\"],\"tests\":[\"alloc\",\"rand\",\"rand_xorshift\"],\"wnaf-memuse\":[\"alloc\",\"memuse\"]}}", + "group_0.14.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"ff\",\"req\":\"^0.14\"},{\"name\":\"memuse\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"rand\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.10\"},{\"name\":\"rand_xorshift\",\"optional\":true,\"req\":\"^0.5\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2.2.1\"}],\"features\":{\"alloc\":[],\"default\":[\"alloc\"],\"tests\":[\"alloc\",\"rand\",\"rand_xorshift\"],\"wnaf-memuse\":[\"alloc\",\"memuse\"]}}", "h2_0.3.27": "{\"dependencies\":[{\"name\":\"bytes\",\"req\":\"^1\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.10\"},{\"name\":\"fnv\",\"req\":\"^1.0.5\"},{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"futures-sink\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"futures-util\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"name\":\"http\",\"req\":\"^0.2\"},{\"features\":[\"std\"],\"name\":\"indexmap\",\"req\":\"^2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1.0.3\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.4\"},{\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.0\"},{\"name\":\"slab\",\"req\":\"^0.4.2\"},{\"features\":[\"io-util\"],\"name\":\"tokio\",\"req\":\"^1\"},{\"features\":[\"rt-multi-thread\",\"macros\",\"sync\",\"net\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"tokio-rustls\",\"req\":\"^0.24\"},{\"features\":[\"codec\",\"io\"],\"name\":\"tokio-util\",\"req\":\"^0.7.1\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"tracing\",\"req\":\"^0.1.35\"},{\"kind\":\"dev\",\"name\":\"walkdir\",\"req\":\"^2.3.2\"},{\"kind\":\"dev\",\"name\":\"webpki-roots\",\"req\":\"^0.25\"}],\"features\":{\"stream\":[],\"unstable\":[]}}", "h2_0.4.13": "{\"dependencies\":[{\"name\":\"atomic-waker\",\"req\":\"^1.0.0\"},{\"name\":\"bytes\",\"req\":\"^1\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.10\"},{\"name\":\"fnv\",\"req\":\"^1.0.5\"},{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"futures-sink\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"name\":\"http\",\"req\":\"^1\"},{\"features\":[\"std\"],\"name\":\"indexmap\",\"req\":\"^2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1.0.3\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.4\"},{\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.0\"},{\"name\":\"slab\",\"req\":\"^0.4.2\"},{\"features\":[\"io-util\"],\"name\":\"tokio\",\"req\":\"^1\"},{\"features\":[\"rt-multi-thread\",\"macros\",\"sync\",\"net\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"tokio-rustls\",\"req\":\"^0.26\"},{\"features\":[\"codec\",\"io\"],\"name\":\"tokio-util\",\"req\":\"^0.7.1\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"tracing\",\"req\":\"^0.1.35\"},{\"kind\":\"dev\",\"name\":\"walkdir\",\"req\":\"^2.3.2\"},{\"kind\":\"dev\",\"name\":\"webpki-roots\",\"req\":\"^1\"}],\"features\":{\"stream\":[],\"unstable\":[]}}", "hashbrown_0.12.3": "{\"dependencies\":[{\"default_features\":false,\"name\":\"ahash\",\"optional\":true,\"req\":\"^0.7.0\"},{\"name\":\"alloc\",\"optional\":true,\"package\":\"rustc-std-workspace-alloc\",\"req\":\"^1.0.0\"},{\"name\":\"bumpalo\",\"optional\":true,\"req\":\"^3.5.0\"},{\"name\":\"compiler_builtins\",\"optional\":true,\"req\":\"^0.1.2\"},{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3.1\"},{\"kind\":\"dev\",\"name\":\"fnv\",\"req\":\"^1.0.7\"},{\"kind\":\"dev\",\"name\":\"lazy_static\",\"req\":\"^1.4\"},{\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.3\"},{\"name\":\"rayon\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"rayon\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.25\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0\"}],\"features\":{\"ahash-compile-time-rng\":[\"ahash/compile-time-rng\"],\"default\":[\"ahash\",\"inline-more\"],\"inline-more\":[],\"nightly\":[],\"raw\":[],\"rustc-dep-of-std\":[\"nightly\",\"core\",\"compiler_builtins\",\"alloc\",\"rustc-internal-api\"],\"rustc-internal-api\":[]}}", @@ -791,15 +792,14 @@ "hashbrown_0.17.0": "{\"dependencies\":[{\"name\":\"alloc\",\"optional\":true,\"package\":\"rustc-std-workspace-alloc\",\"req\":\"^1.0.0\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"allocator-api2\",\"optional\":true,\"req\":\"^0.2.9\"},{\"features\":[\"allocator-api2\"],\"kind\":\"dev\",\"name\":\"bumpalo\",\"req\":\"^3.13.0\"},{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"},{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7\"},{\"default_features\":false,\"name\":\"equivalent\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"fnv\",\"req\":\"^1.0.7\"},{\"default_features\":false,\"name\":\"foldhash\",\"optional\":true,\"req\":\"^0.2.0\"},{\"kind\":\"dev\",\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"cfg(unix)\"},{\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9.0\"},{\"name\":\"rayon\",\"optional\":true,\"req\":\"^1.9.0\"},{\"kind\":\"dev\",\"name\":\"rayon\",\"req\":\"^1.2\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.220\",\"target\":\"cfg(any())\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.221\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0\"}],\"features\":{\"default\":[\"default-hasher\",\"inline-more\",\"allocator-api2\",\"equivalent\",\"raw-entry\"],\"default-hasher\":[\"dep:foldhash\"],\"inline-more\":[],\"nightly\":[\"foldhash?/nightly\",\"bumpalo/allocator_api\"],\"raw-entry\":[],\"rustc-dep-of-std\":[\"nightly\",\"core\",\"alloc\",\"rustc-internal-api\"],\"rustc-internal-api\":[],\"serde\":[\"dep:serde_core\",\"dep:serde\"]}}", "hashbrown_0.17.1": "{\"dependencies\":[{\"name\":\"alloc\",\"optional\":true,\"package\":\"rustc-std-workspace-alloc\",\"req\":\"^1.0.0\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"allocator-api2\",\"optional\":true,\"req\":\"^0.2.9\"},{\"features\":[\"allocator-api2\"],\"kind\":\"dev\",\"name\":\"bumpalo\",\"req\":\"^3.13.0\"},{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"},{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7\"},{\"default_features\":false,\"name\":\"equivalent\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"fnv\",\"req\":\"^1.0.7\"},{\"default_features\":false,\"name\":\"foldhash\",\"optional\":true,\"req\":\"^0.2.0\"},{\"kind\":\"dev\",\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"cfg(unix)\"},{\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9.0\"},{\"name\":\"rayon\",\"optional\":true,\"req\":\"^1.9.0\"},{\"kind\":\"dev\",\"name\":\"rayon\",\"req\":\"^1.2\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.220\",\"target\":\"cfg(any())\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.221\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0\"}],\"features\":{\"default\":[\"default-hasher\",\"inline-more\",\"allocator-api2\",\"equivalent\",\"raw-entry\"],\"default-hasher\":[\"dep:foldhash\"],\"inline-more\":[],\"nightly\":[\"foldhash?/nightly\",\"bumpalo/allocator_api\"],\"raw-entry\":[],\"rustc-dep-of-std\":[\"nightly\",\"core\",\"alloc\",\"rustc-internal-api\"],\"rustc-internal-api\":[],\"serde\":[\"dep:serde_core\",\"dep:serde\"]}}", "hashlink_0.10.0": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"default-hasher\",\"inline-more\"],\"name\":\"hashbrown\",\"req\":\"^0.15\"},{\"kind\":\"dev\",\"name\":\"rustc-hash\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0\"}],\"features\":{\"serde_impl\":[\"serde\"]}}", - "hax-lib-macros-types_0.3.5": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1.0.66\"},{\"name\":\"quote\",\"req\":\"^1.0.32\"},{\"name\":\"schemars\",\"optional\":true,\"req\":\"^0.8\"},{\"features\":[\"derive\",\"rc\"],\"name\":\"serde\",\"req\":\"^1.0\"},{\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"features\":[\"v4\"],\"name\":\"uuid\",\"req\":\"^1.5\"}],\"features\":{}}", - "hax-lib-macros_0.3.5": "{\"dependencies\":[{\"name\":\"hax-lib-macros-types\",\"req\":\"=0.3.5\",\"target\":\"cfg(hax)\"},{\"name\":\"proc-macro-error2\",\"req\":\"^2.0\",\"target\":\"cfg(hax)\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.66\"},{\"name\":\"quote\",\"req\":\"^1.0.32\"},{\"features\":[\"full\",\"visit\",\"visit-mut\"],\"name\":\"syn\",\"req\":\"^2.0\"},{\"features\":[\"full\",\"visit-mut\",\"visit\"],\"name\":\"syn\",\"req\":\"^2.0\",\"target\":\"cfg(hax)\"}],\"features\":{}}", - "hax-lib_0.3.5": "{\"dependencies\":[{\"name\":\"hax-lib-macros\",\"optional\":true,\"req\":\"=0.3.5\"},{\"default_features\":false,\"name\":\"num-bigint\",\"req\":\"^0.4\",\"target\":\"cfg(hax)\"},{\"default_features\":false,\"name\":\"num-traits\",\"req\":\"^0.2\",\"target\":\"cfg(hax)\"}],\"features\":{\"default\":[\"macros\"],\"macros\":[\"dep:hax-lib-macros\"]}}", "heck_0.5.0": "{\"dependencies\":[],\"features\":{}}", "hermit-abi_0.5.2": "{\"dependencies\":[{\"name\":\"alloc\",\"optional\":true,\"package\":\"rustc-std-workspace-alloc\",\"req\":\"^1.0.0\"},{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"}],\"features\":{\"default\":[],\"rustc-dep-of-std\":[\"core\",\"alloc\"]}}", - "hex-literal_0.4.1": "{\"dependencies\":[],\"features\":{}}", + "hex-literal_1.1.0": "{\"dependencies\":[],\"features\":{}}", "hex_0.4.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"faster-hex\",\"req\":\"^0.5\"},{\"kind\":\"dev\",\"name\":\"pretty_assertions\",\"req\":\"^0.6\"},{\"kind\":\"dev\",\"name\":\"rustc-hex\",\"req\":\"^2.1\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"version-sync\",\"req\":\"^0.9\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[\"alloc\"]}}", "hkdf_0.12.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"blobby\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.2.2\"},{\"name\":\"hmac\",\"req\":\"^0.12.1\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha1\",\"req\":\"^0.10\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.10\"}],\"features\":{\"std\":[\"hmac/std\"]}}", + "hkdf_0.13.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"blobby\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"hmac\",\"req\":\"^0.13\"},{\"name\":\"kdf\",\"optional\":true,\"req\":\"^0.1\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha1\",\"req\":\"^0.11\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.11\"}],\"features\":{}}", "hmac_0.12.1": "{\"dependencies\":[{\"features\":[\"mac\"],\"name\":\"digest\",\"req\":\"^0.10.3\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"digest\",\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.2.2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"md-5\",\"req\":\"^0.10\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha-1\",\"req\":\"^0.10\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.10\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"streebog\",\"req\":\"^0.10\"}],\"features\":{\"reset\":[],\"std\":[\"digest/std\"]}}", + "hmac_0.13.0": "{\"dependencies\":[{\"features\":[\"mac\"],\"name\":\"digest\",\"req\":\"^0.11.2\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"digest\",\"req\":\"^0.11.2\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"md-5\",\"req\":\"^0.11\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha1\",\"req\":\"^0.11\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.11\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"streebog\",\"req\":\"^0.11\"}],\"features\":{\"zeroize\":[\"digest/zeroize\"]}}", "home_0.5.12": "{\"dependencies\":[{\"features\":[\"Win32_Foundation\",\"Win32_UI_Shell\",\"Win32_System_Com\"],\"name\":\"windows-sys\",\"req\":\"^0.61\",\"target\":\"cfg(windows)\"}],\"features\":{}}", "http-auth_0.1.10": "{\"dependencies\":[{\"name\":\"base64\",\"optional\":true,\"req\":\"^0.22.0\"},{\"name\":\"digest\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"hex\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"http\",\"optional\":true,\"req\":\"^0.2.5\"},{\"name\":\"http10\",\"optional\":true,\"package\":\"http\",\"req\":\"^1.0.0\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"md-5\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"memchr\",\"req\":\"^2.4.1\"},{\"kind\":\"dev\",\"name\":\"pretty_assertions\",\"req\":\"^1.0.0\"},{\"name\":\"rand\",\"optional\":true,\"req\":\"^0.8.4\"},{\"features\":[\"blocking\"],\"kind\":\"dev\",\"name\":\"reqwest\",\"req\":\"^0.12.7\"},{\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.10\"}],\"features\":{\"basic-scheme\":[\"base64\"],\"default\":[\"basic-scheme\",\"digest-scheme\"],\"digest-scheme\":[\"digest\",\"hex\",\"md-5\",\"rand\",\"sha2\"],\"trace\":[\"log\"]}}", "http-body-util_0.1.3": "{\"dependencies\":[{\"name\":\"bytes\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"futures-util\",\"req\":\"^0.3\"},{\"name\":\"http\",\"req\":\"^1\"},{\"name\":\"http-body\",\"req\":\"^1\"},{\"name\":\"pin-project-lite\",\"req\":\"^0.2\"},{\"features\":[\"sync\"],\"name\":\"tokio\",\"optional\":true,\"req\":\"^1\"},{\"features\":[\"macros\",\"rt\",\"sync\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"}],\"features\":{\"channel\":[\"dep:tokio\"],\"default\":[],\"full\":[\"channel\"]}}", @@ -809,7 +809,7 @@ "http_1.4.0": "{\"dependencies\":[{\"name\":\"bytes\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\"},{\"name\":\"itoa\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.0\"},{\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"}],\"features\":{\"default\":[\"std\"],\"std\":[]}}", "httparse_1.10.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3.5\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.5\"}],\"features\":{\"default\":[\"std\"],\"std\":[]}}", "httpdate_1.0.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5\"}],\"features\":{}}", - "hybrid-array_0.4.10": "{\"dependencies\":[{\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"name\":\"bytemuck\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"ctutils\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"postcard\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"const-generics\"],\"name\":\"subtle\",\"optional\":true,\"req\":\"^2\"},{\"features\":[\"const-generics\"],\"name\":\"typenum\",\"req\":\"^1.17\"},{\"features\":[\"derive\"],\"name\":\"zerocopy\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.8\"}],\"features\":{\"alloc\":[],\"extra-sizes\":[]}}", + "hybrid-array_0.4.14": "{\"dependencies\":[{\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"name\":\"bytemuck\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"ctutils\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"const-generics\"],\"name\":\"subtle\",\"optional\":true,\"req\":\"^2\"},{\"features\":[\"const-generics\"],\"name\":\"typenum\",\"req\":\"^1.20\"},{\"features\":[\"derive\"],\"name\":\"zerocopy\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.8\"}],\"features\":{\"alloc\":[],\"extra-sizes\":[]}}", "hyper-named-pipe_0.1.0": "{\"dependencies\":[{\"name\":\"hex\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"http-body-util\",\"req\":\"^0.1.0\"},{\"features\":[\"client\",\"http1\"],\"name\":\"hyper\",\"req\":\"^1.1\"},{\"features\":[\"client\",\"server\",\"http1\"],\"kind\":\"dev\",\"name\":\"hyper\",\"req\":\"^1.1\"},{\"features\":[\"http1\",\"client-legacy\",\"tokio\"],\"name\":\"hyper-util\",\"req\":\"^0.1.2\"},{\"name\":\"pin-project-lite\",\"req\":\"^0.2.8\"},{\"kind\":\"dev\",\"name\":\"thiserror\",\"req\":\"^1\"},{\"features\":[\"net\"],\"name\":\"tokio\",\"req\":\"^1.35\"},{\"features\":[\"macros\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.35\"},{\"name\":\"tower-service\",\"req\":\"^0.3\"},{\"features\":[\"winerror\"],\"name\":\"winapi\",\"req\":\"^0.3.9\"}],\"features\":{}}", "hyper-rustls_0.24.2": "{\"dependencies\":[{\"default_features\":false,\"name\":\"futures-util\",\"req\":\"^0.3\"},{\"name\":\"http\",\"req\":\"^0.2\"},{\"default_features\":false,\"features\":[\"client\"],\"name\":\"hyper\",\"req\":\"^0.14\"},{\"features\":[\"full\"],\"kind\":\"dev\",\"name\":\"hyper\",\"req\":\"^0.14\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.4\"},{\"default_features\":false,\"name\":\"rustls\",\"req\":\"^0.21.6\"},{\"default_features\":false,\"features\":[\"tls12\"],\"kind\":\"dev\",\"name\":\"rustls\",\"req\":\"^0.21.0\"},{\"name\":\"rustls-native-certs\",\"optional\":true,\"req\":\"^0.6\"},{\"kind\":\"dev\",\"name\":\"rustls-pemfile\",\"req\":\"^1.0.0\"},{\"name\":\"tokio\",\"req\":\"^1.0\"},{\"features\":[\"io-std\",\"macros\",\"net\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"tokio-rustls\",\"req\":\"^0.24.0\"},{\"name\":\"webpki-roots\",\"optional\":true,\"req\":\"^0.25\"}],\"features\":{\"acceptor\":[\"hyper/server\",\"tokio-runtime\"],\"default\":[\"native-tokio\",\"http1\",\"tls12\",\"logging\",\"acceptor\"],\"http1\":[\"hyper/http1\"],\"http2\":[\"hyper/http2\"],\"logging\":[\"log\",\"tokio-rustls/logging\",\"rustls/logging\"],\"native-tokio\":[\"tokio-runtime\",\"rustls-native-certs\"],\"tls12\":[\"tokio-rustls/tls12\",\"rustls/tls12\"],\"tokio-runtime\":[\"hyper/runtime\"],\"webpki-tokio\":[\"tokio-runtime\",\"webpki-roots\"]}}", "hyper-rustls_0.27.9": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"cfg-if\",\"req\":\"^1\"},{\"name\":\"http\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"http-body-util\",\"req\":\"^0.1\"},{\"default_features\":false,\"name\":\"hyper\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"client-legacy\",\"tokio\"],\"name\":\"hyper-util\",\"req\":\"^0.1\"},{\"default_features\":false,\"features\":[\"server-auto\"],\"kind\":\"dev\",\"name\":\"hyper-util\",\"req\":\"^0.1\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.4\"},{\"default_features\":false,\"name\":\"rustls\",\"req\":\"^0.23\"},{\"default_features\":false,\"features\":[\"tls12\"],\"kind\":\"dev\",\"name\":\"rustls\",\"req\":\"^0.23\"},{\"name\":\"rustls-native-certs\",\"optional\":true,\"req\":\"^0.8\"},{\"name\":\"rustls-platform-verifier\",\"optional\":true,\"req\":\"^0.7\"},{\"name\":\"tokio\",\"req\":\"^1.0\"},{\"features\":[\"io-std\",\"macros\",\"net\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"tokio-rustls\",\"req\":\"^0.26\"},{\"name\":\"tower-service\",\"req\":\"^0.3\"},{\"name\":\"webpki-roots\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"aws-lc-rs\":[\"rustls/aws_lc_rs\"],\"default\":[\"native-tokio\",\"http1\",\"tls12\",\"logging\",\"aws-lc-rs\"],\"fips\":[\"aws-lc-rs\",\"rustls/fips\"],\"http1\":[\"hyper-util/http1\"],\"http2\":[\"hyper-util/http2\"],\"logging\":[\"log\",\"tokio-rustls/logging\",\"rustls/logging\"],\"native-tokio\":[\"rustls-native-certs\"],\"ring\":[\"rustls/ring\"],\"tls12\":[\"tokio-rustls/tls12\",\"rustls/tls12\"],\"webpki-tokio\":[\"webpki-roots\"]}}", @@ -842,8 +842,9 @@ "inotify-sys_0.1.5": "{\"dependencies\":[{\"name\":\"libc\",\"req\":\"^0.2\"}],\"features\":{}}", "inotify_0.11.2": "{\"dependencies\":[{\"name\":\"bitflags\",\"req\":\"^2\"},{\"name\":\"futures-util\",\"optional\":true,\"req\":\"^0.3.30\"},{\"kind\":\"dev\",\"name\":\"futures-util\",\"req\":\"^0.3.30\"},{\"name\":\"inotify-sys\",\"req\":\"^0.1.5\"},{\"name\":\"libc\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"maplit\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.12.0\"},{\"features\":[\"net\"],\"name\":\"tokio\",\"optional\":true,\"req\":\"^1.40.0\"},{\"features\":[\"macros\",\"rt-multi-thread\",\"time\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.40.0\"}],\"features\":{\"default\":[\"stream\"],\"stream\":[\"futures-util\",\"tokio\"]}}", "inout_0.1.4": "{\"dependencies\":[{\"name\":\"block-padding\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"generic-array\",\"req\":\"^0.14\"}],\"features\":{\"std\":[\"block-padding/std\"]}}", + "inout_0.2.2": "{\"dependencies\":[{\"name\":\"block-padding\",\"optional\":true,\"req\":\"^0.4.2\"},{\"name\":\"hybrid-array\",\"req\":\"^0.4\"}],\"features\":{}}", "instant_0.1.13": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1.0\"},{\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"asmjs-unknown-emscripten\"},{\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"wasm32-unknown-emscripten\"},{\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"wasm32-unknown-unknown\"},{\"name\":\"stdweb\",\"optional\":true,\"req\":\"^0.4\",\"target\":\"asmjs-unknown-emscripten\"},{\"name\":\"stdweb\",\"optional\":true,\"req\":\"^0.4\",\"target\":\"wasm32-unknown-emscripten\"},{\"name\":\"stdweb\",\"optional\":true,\"req\":\"^0.4\",\"target\":\"wasm32-unknown-unknown\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\"},{\"name\":\"wasm-bindgen_rs\",\"optional\":true,\"package\":\"wasm-bindgen\",\"req\":\"^0.2\",\"target\":\"asmjs-unknown-emscripten\"},{\"name\":\"wasm-bindgen_rs\",\"optional\":true,\"package\":\"wasm-bindgen\",\"req\":\"^0.2\",\"target\":\"wasm32-unknown-emscripten\"},{\"name\":\"wasm-bindgen_rs\",\"optional\":true,\"package\":\"wasm-bindgen\",\"req\":\"^0.2\",\"target\":\"wasm32-unknown-unknown\"},{\"features\":[\"Window\",\"Performance\",\"PerformanceTiming\"],\"name\":\"web-sys\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"asmjs-unknown-emscripten\"},{\"features\":[\"Window\",\"Performance\",\"PerformanceTiming\"],\"name\":\"web-sys\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"wasm32-unknown-emscripten\"},{\"features\":[\"Window\",\"Performance\",\"PerformanceTiming\"],\"name\":\"web-sys\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"wasm32-unknown-unknown\"}],\"features\":{\"inaccurate\":[],\"now\":[],\"wasm-bindgen\":[\"js-sys\",\"wasm-bindgen_rs\",\"web-sys\"]}}", - "internal-russh-forked-ssh-key_0.6.16+upstream-0.6.7": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"argon2\",\"optional\":true,\"req\":\"^0.5\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"bcrypt-pbkdf\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"bigint\",\"optional\":true,\"package\":\"num-bigint-dig\",\"req\":\"^0.8.4\"},{\"name\":\"cipher\",\"package\":\"ssh-cipher\",\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"digest_next\",\"package\":\"digest\",\"req\":\"^0.11.0-rc.4\"},{\"default_features\":false,\"name\":\"dsa\",\"optional\":true,\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"ecdsa\",\"optional\":true,\"req\":\"^0.16.8\"},{\"default_features\":false,\"name\":\"ed25519-dalek\",\"optional\":true,\"req\":\"^2\"},{\"features\":[\"base64\",\"pem\",\"sha2\"],\"name\":\"encoding\",\"package\":\"ssh-encoding\",\"req\":\"^0.2\"},{\"name\":\"hex\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4.1\"},{\"name\":\"hmac\",\"optional\":true,\"req\":\"^0.12\"},{\"default_features\":false,\"features\":[\"ecdsa\"],\"name\":\"p256\",\"optional\":true,\"req\":\"^0.13\"},{\"default_features\":false,\"features\":[\"ecdsa\"],\"name\":\"p384\",\"optional\":true,\"req\":\"^0.13\"},{\"default_features\":false,\"features\":[\"ecdsa\",\"getrandom\"],\"name\":\"p521\",\"optional\":true,\"req\":\"^0.13.3\"},{\"kind\":\"dev\",\"name\":\"rand_chacha\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.6.4\"},{\"default_features\":false,\"features\":[\"sha2\"],\"name\":\"rsa\",\"optional\":true,\"req\":\"^0.10.0-rc.10\"},{\"default_features\":false,\"features\":[\"point\"],\"name\":\"sec1\",\"optional\":true,\"req\":\"^0.7.3\"},{\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.16\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"sha1\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"sha1_next\",\"optional\":true,\"package\":\"sha1\",\"req\":\"^0.11.0-rc.3\"},{\"default_features\":false,\"name\":\"sha2\",\"req\":\"^0.10.8\"},{\"default_features\":false,\"name\":\"signature\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"signature_next\",\"package\":\"signature\",\"req\":\"^3.0.0-rc.5\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2.5\"},{\"default_features\":false,\"name\":\"zeroize\",\"req\":\"^1\"}],\"features\":{\"alloc\":[\"encoding/alloc\",\"signature/alloc\",\"zeroize/alloc\"],\"crypto\":[\"ed25519\",\"p256\",\"p384\",\"p521\",\"rsa\"],\"default\":[\"ecdsa\",\"rand_core\",\"std\"],\"dsa\":[\"dep:bigint\",\"dep:dsa\",\"dep:sha1\",\"dep:sha1_next\",\"alloc\",\"signature/rand_core\"],\"ecdsa\":[\"dep:sec1\",\"dep:ecdsa\"],\"ed25519\":[\"dep:ed25519-dalek\",\"rand_core\"],\"encryption\":[\"dep:bcrypt-pbkdf\",\"alloc\",\"cipher/aes-cbc\",\"cipher/aes-ctr\",\"cipher/aes-gcm\",\"cipher/chacha20poly1305\",\"rand_core\"],\"getrandom\":[\"rand_core/getrandom\"],\"hazmat-allow-insecure-rsa-keys\":[],\"p256\":[\"dep:p256\",\"ecdsa\"],\"p384\":[\"dep:p384\",\"ecdsa\"],\"p521\":[\"dep:p521\",\"ecdsa\"],\"ppk\":[\"dep:hex\",\"alloc\",\"cipher/aes-cbc\",\"dep:hmac\",\"dep:argon2\",\"dep:sha1\",\"dep:sha1_next\"],\"rsa\":[\"dep:bigint\",\"dep:rsa\",\"alloc\",\"rand_core\"],\"rsa-sha1\":[\"rsa\",\"dep:sha1\",\"dep:sha1_next\",\"sha1/oid\"],\"std\":[\"alloc\",\"encoding/std\",\"p256?/std\",\"p384?/std\",\"p521?/std\",\"rsa?/std\",\"sec1?/std\",\"signature/std\"],\"tdes\":[\"cipher/tdes\",\"encryption\"]}}", + "internal-russh-num-bigint_0.5.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"i128\"],\"name\":\"num-integer\",\"req\":\"^0.1.46\"},{\"default_features\":false,\"features\":[\"i128\"],\"name\":\"num-traits\",\"req\":\"^0.2.18\"},{\"default_features\":false,\"name\":\"quickcheck\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"name\":\"rand_0_10\",\"optional\":true,\"package\":\"rand\",\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"rand_0_9\",\"optional\":true,\"package\":\"rand\",\"req\":\"^0.9\"},{\"default_features\":false,\"name\":\"rand_core_0_10\",\"optional\":true,\"package\":\"rand_core\",\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"rand_core_0_9\",\"optional\":true,\"package\":\"rand_core\",\"req\":\"^0.9\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"}],\"features\":{\"arbitrary\":[\"dep:arbitrary\"],\"default\":[\"std\"],\"quickcheck\":[\"dep:quickcheck\"],\"rand_0_10\":[\"rand_core_0_10\",\"dep:rand_0_10\"],\"rand_0_9\":[\"rand_core_0_9\",\"dep:rand_0_9\"],\"rand_core_0_10\":[\"dep:rand_core_0_10\"],\"rand_core_0_9\":[\"dep:rand_core_0_9\"],\"serde\":[\"dep:serde\"],\"std\":[\"num-integer/std\",\"num-traits/std\"]}}", "ipnet_2.12.0": "{\"dependencies\":[{\"name\":\"heapless\",\"optional\":true,\"req\":\"^0\"},{\"default_features\":false,\"name\":\"schemars08\",\"optional\":true,\"package\":\"schemars\",\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"schemars1\",\"optional\":true,\"package\":\"schemars\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"package\":\"serde\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1\"}],\"features\":{\"default\":[\"std\"],\"heapless\":[\"dep:heapless\",\"serde\"],\"json\":[\"schemars08\",\"serde\"],\"schemars\":[\"schemars08\"],\"schemars08\":[\"dep:schemars08\"],\"schemars1\":[\"dep:schemars1\"],\"ser_as_str\":[\"dep:heapless\"],\"serde\":[\"dep:serde\"],\"std\":[]}}", "iri-string_0.7.12": "{\"dependencies\":[{\"default_features\":false,\"name\":\"memchr\",\"optional\":true,\"req\":\"^2.4.1\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.103\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0.104\"}],\"features\":{\"alloc\":[\"serde?/alloc\"],\"default\":[\"std\"],\"std\":[\"alloc\",\"memchr?/std\",\"serde?/std\"]}}", "is_ci_1.2.0": "{\"dependencies\":[],\"features\":{}}", @@ -870,6 +871,8 @@ "jsonwebtoken_10.3.0": "{\"dependencies\":[{\"name\":\"aws-lc-rs\",\"optional\":true,\"req\":\"^1.15.0\"},{\"name\":\"base64\",\"req\":\"^0.22\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.8\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\"))))\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.8\",\"target\":\"cfg(not(all(target_arch = \\\"wasm32\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\")))))\"},{\"features\":[\"pkcs8\"],\"name\":\"ed25519-dalek\",\"optional\":true,\"req\":\"^2.1.1\"},{\"features\":[\"pkcs8\",\"rand_core\"],\"kind\":\"dev\",\"name\":\"ed25519-dalek\",\"req\":\"^2.1.1\"},{\"name\":\"getrandom\",\"req\":\"^0.2\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"hmac\",\"optional\":true,\"req\":\"^0.12.1\"},{\"name\":\"js-sys\",\"req\":\"^0.3\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"features\":[\"ecdsa\"],\"name\":\"p256\",\"optional\":true,\"req\":\"^0.13.2\"},{\"features\":[\"ecdsa\"],\"name\":\"p384\",\"optional\":true,\"req\":\"^0.13.0\"},{\"name\":\"pem\",\"optional\":true,\"req\":\"^3\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"rand\",\"optional\":true,\"req\":\"^0.8.5\"},{\"default_features\":false,\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.5\"},{\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.6.4\"},{\"name\":\"rsa\",\"optional\":true,\"req\":\"^0.9.6\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"req\":\"^1.0.228\"},{\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"features\":[\"oid\"],\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.10.7\"},{\"features\":[\"std\"],\"name\":\"signature\",\"req\":\"^2.2.0\"},{\"name\":\"simple_asn1\",\"optional\":true,\"req\":\"^0.6\"},{\"features\":[\"wasm-bindgen\"],\"kind\":\"dev\",\"name\":\"time\",\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\"))))\"},{\"kind\":\"dev\",\"name\":\"time\",\"req\":\"^0.3\",\"target\":\"cfg(not(all(target_arch = \\\"wasm32\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\")))))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3.1\"}],\"features\":{\"aws_lc_rs\":[\"aws-lc-rs\"],\"default\":[\"use_pem\"],\"rust_crypto\":[\"ed25519-dalek\",\"hmac\",\"p256\",\"p384\",\"rand\",\"rsa\",\"sha2\"],\"use_pem\":[\"pem\",\"simple_asn1\"]}}", "jsonwebtoken_9.3.1": "{\"dependencies\":[{\"name\":\"base64\",\"req\":\"^0.22\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.4\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\"))))\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.4\",\"target\":\"cfg(not(all(target_arch = \\\"wasm32\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\")))))\"},{\"name\":\"js-sys\",\"req\":\"^0.3\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"pem\",\"optional\":true,\"req\":\"^3\"},{\"features\":[\"std\"],\"name\":\"ring\",\"req\":\"^0.17.4\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"std\",\"wasm32_unknown_unknown_js\"],\"name\":\"ring\",\"req\":\"^0.17.4\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"req\":\"^1.0\"},{\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"name\":\"simple_asn1\",\"optional\":true,\"req\":\"^0.6\"},{\"features\":[\"wasm-bindgen\"],\"kind\":\"dev\",\"name\":\"time\",\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\"))))\"},{\"kind\":\"dev\",\"name\":\"time\",\"req\":\"^0.3\",\"target\":\"cfg(not(all(target_arch = \\\"wasm32\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\")))))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3.1\"}],\"features\":{\"default\":[\"use_pem\"],\"use_pem\":[\"pem\",\"simple_asn1\"]}}", "k8s-openapi_0.21.1": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"base64\",\"req\":\"^0.21\"},{\"default_features\":false,\"features\":[\"alloc\",\"serde\"],\"name\":\"chrono\",\"req\":\"^0.4.1\"},{\"default_features\":false,\"name\":\"schemars\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"serde\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"serde-value\",\"req\":\"^0.7\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"serde_json\",\"req\":\"^1\"}],\"features\":{\"earliest\":[\"v1_24\"],\"latest\":[\"v1_29\"],\"v1_24\":[],\"v1_25\":[],\"v1_26\":[],\"v1_27\":[],\"v1_28\":[],\"v1_29\":[]}}", + "keccak_0.2.0": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"name\":\"cpufeatures\",\"req\":\"^0.3\",\"target\":\"cfg(target_arch = \\\"aarch64\\\")\"},{\"name\":\"hybrid-array\",\"optional\":true,\"req\":\"^0.4\"}],\"features\":{\"parallel\":[\"dep:hybrid-array\"]}}", + "kem_0.3.0": "{\"dependencies\":[{\"features\":[\"rand_core\"],\"name\":\"common\",\"package\":\"crypto-common\",\"req\":\"^0.2\"},{\"name\":\"rand_core\",\"req\":\"^0.10\"}],\"features\":{\"getrandom\":[\"common/getrandom\"]}}", "konst_0.2.20": "{\"dependencies\":[{\"name\":\"konst_macro_rules\",\"req\":\"=0.2.19\"},{\"name\":\"konst_proc_macros\",\"optional\":true,\"req\":\"=0.2.11\"},{\"default_features\":false,\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.4\"},{\"name\":\"trybuild\",\"optional\":true,\"req\":\"^1.0\"}],\"features\":{\"__test\":[],\"__ui\":[\"__test\",\"trybuild\",\"rust_latest_stable\"],\"alloc\":[],\"cmp\":[],\"const_generics\":[\"rust_1_51\"],\"constant_time_slice\":[\"rust_latest_stable\"],\"default\":[\"cmp\",\"parsing\"],\"deref_raw_in_fn\":[\"rust_1_56\"],\"docsrs\":[],\"mut_refs\":[\"rust_latest_stable\",\"konst_macro_rules/mut_refs\"],\"nightly_mut_refs\":[\"mut_refs\",\"konst_macro_rules/nightly_mut_refs\"],\"parsing\":[\"parsing_no_proc\",\"konst_proc_macros\"],\"parsing_no_proc\":[],\"rust_1_51\":[\"konst_macro_rules/rust_1_51\"],\"rust_1_55\":[\"rust_1_51\",\"konst_macro_rules/rust_1_55\"],\"rust_1_56\":[\"rust_1_55\",\"konst_macro_rules/rust_1_56\"],\"rust_1_57\":[\"rust_1_56\",\"konst_macro_rules/rust_1_57\"],\"rust_1_61\":[\"rust_1_57\",\"konst_macro_rules/rust_1_61\"],\"rust_1_64\":[\"rust_1_61\"],\"rust_latest_stable\":[\"rust_1_64\"]}}", "konst_macro_rules_0.2.19": "{\"dependencies\":[],\"features\":{\"deref_raw_in_fn\":[],\"mut_refs\":[],\"nightly_mut_refs\":[],\"rust_1_51\":[],\"rust_1_55\":[],\"rust_1_56\":[],\"rust_1_57\":[],\"rust_1_61\":[]}}", "kqueue-sys_1.1.2": "{\"dependencies\":[{\"default_features\":false,\"name\":\"bitflags\",\"req\":\"^2.11.0\"},{\"name\":\"libc\",\"req\":\"^0.2.74\"}],\"features\":{}}", @@ -885,14 +888,8 @@ "leb128fmt_0.1.0": "{\"dependencies\":[],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[]}}", "libbz2-rs-sys_0.2.3": "{\"dependencies\":[{\"name\":\"libc\",\"optional\":true,\"req\":\"^0.2\"}],\"features\":{\"__internal-fuzz-disable-checksum\":[],\"c-allocator\":[\"dep:libc\"],\"custom-prefix\":[\"export-symbols\"],\"default\":[\"std\",\"stdio\"],\"export-symbols\":[],\"rust-allocator\":[],\"semver-prefix\":[\"export-symbols\"],\"std\":[\"rust-allocator\"],\"stdio\":[\"dep:libc\"],\"testing-prefix\":[\"export-symbols\"]}}", "libc_0.2.183": "{\"dependencies\":[{\"name\":\"rustc-std-workspace-core\",\"optional\":true,\"req\":\"^1.0.1\"}],\"features\":{\"align\":[],\"const-extern-fn\":[],\"default\":[\"std\"],\"extra_traits\":[],\"rustc-dep-of-std\":[\"align\",\"rustc-std-workspace-core\"],\"std\":[],\"use_std\":[\"std\"]}}", - "libc_0.2.185": "{\"dependencies\":[{\"name\":\"rustc-std-workspace-core\",\"optional\":true,\"req\":\"^1.0.1\"}],\"features\":{\"align\":[],\"const-extern-fn\":[],\"default\":[\"std\"],\"extra_traits\":[],\"rustc-dep-of-std\":[\"align\",\"rustc-std-workspace-core\"],\"std\":[],\"use_std\":[\"std\"]}}", "libc_0.2.186": "{\"dependencies\":[{\"name\":\"rustc-std-workspace-core\",\"optional\":true,\"req\":\"^1.0.1\"}],\"features\":{\"align\":[],\"const-extern-fn\":[],\"default\":[\"std\"],\"extra_traits\":[],\"rustc-dep-of-std\":[\"align\",\"rustc-std-workspace-core\"],\"std\":[],\"use_std\":[\"std\"]}}", - "libcrux-intrinsics_0.0.4": "{\"dependencies\":[{\"name\":\"core-models\",\"req\":\"^0.0.4\",\"target\":\"cfg(hax)\"},{\"name\":\"hax-lib\",\"req\":\"=0.3.5\"}],\"features\":{\"simd128\":[],\"simd256\":[]}}", - "libcrux-ml-kem_0.0.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7\"},{\"name\":\"hax-lib\",\"req\":\"=0.3.5\"},{\"features\":[\"serde\"],\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"name\":\"libcrux-intrinsics\",\"req\":\"^0.0.4\"},{\"name\":\"libcrux-platform\",\"req\":\"^0.0.2\"},{\"name\":\"libcrux-secrets\",\"req\":\"^0.0.4\"},{\"name\":\"libcrux-sha3\",\"req\":\"^0.0.4\"},{\"name\":\"libcrux-traits\",\"req\":\"^0.0.4\"},{\"features\":[\"generic-tests\"],\"kind\":\"dev\",\"name\":\"libcrux-traits\",\"req\":\"^0.0.4\"},{\"default_features\":false,\"name\":\"rand\",\"optional\":true,\"req\":\"^0.9\"},{\"features\":[\"thread_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"tls_codec\",\"optional\":true,\"req\":\"^0.4.2\"}],\"features\":{\"alloc\":[],\"check-secret-independence\":[\"libcrux-secrets/check-secret-independence\",\"libcrux-traits/check-secret-independence\"],\"codec\":[\"dep:tls_codec\"],\"default\":[\"default-no-std\",\"std\"],\"default-no-std\":[\"mlkem512\",\"mlkem768\",\"mlkem1024\",\"rand\"],\"incremental\":[],\"kyber\":[],\"mlkem1024\":[],\"mlkem512\":[],\"mlkem768\":[],\"pqcp\":[],\"rand\":[\"dep:rand\"],\"simd128\":[\"libcrux-sha3/simd128\",\"libcrux-intrinsics/simd128\"],\"simd256\":[\"libcrux-sha3/simd256\",\"libcrux-intrinsics/simd256\"],\"std\":[\"alloc\",\"rand/std\",\"tls_codec/std\"]}}", - "libcrux-platform_0.0.2": "{\"dependencies\":[{\"name\":\"libc\",\"req\":\"^0.2.153\"}],\"features\":{}}", - "libcrux-secrets_0.0.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7.0\"},{\"name\":\"hax-lib\",\"req\":\"=0.3.5\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"}],\"features\":{\"check-secret-independence\":[]}}", - "libcrux-sha3_0.0.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"cavp\",\"req\":\"^0.0.2\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"clap\",\"req\":\"^4.5.39\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7.0\"},{\"name\":\"hax-lib\",\"req\":\"=0.3.5\"},{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"name\":\"libcrux-intrinsics\",\"req\":\"^0.0.4\"},{\"name\":\"libcrux-platform\",\"req\":\"^0.0.2\"},{\"name\":\"libcrux-traits\",\"req\":\"=0.0.4\"},{\"kind\":\"dev\",\"name\":\"pretty_env_logger\",\"req\":\"^0.5.0\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"}],\"features\":{\"simd128\":[\"libcrux-intrinsics/simd128\"],\"simd256\":[\"libcrux-intrinsics/simd256\"]}}", - "libcrux-traits_0.0.4": "{\"dependencies\":[{\"name\":\"libcrux-secrets\",\"req\":\"=0.0.4\"},{\"default_features\":false,\"name\":\"rand\",\"req\":\"^0.9\"}],\"features\":{\"alloc\":[],\"check-secret-independence\":[\"libcrux-secrets/check-secret-independence\"],\"error-in-core\":[],\"generic-tests\":[]}}", + "libc_0.2.189": "{\"dependencies\":[{\"name\":\"rustc-std-workspace-core\",\"optional\":true,\"req\":\"^1.0.1\"}],\"features\":{\"align\":[],\"const-extern-fn\":[],\"default\":[\"std\"],\"extra_traits\":[],\"rustc-dep-of-std\":[\"align\",\"rustc-std-workspace-core\"],\"std\":[],\"use_std\":[\"std\"]}}", "libloading_0.8.9": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1\",\"target\":\"cfg(unix)\"},{\"kind\":\"dev\",\"name\":\"libc\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"static_assertions\",\"req\":\"^1.1\"},{\"name\":\"windows-link\",\"req\":\"^0.2\",\"target\":\"cfg(windows)\"},{\"features\":[\"Win32_Foundation\"],\"kind\":\"dev\",\"name\":\"windows-sys\",\"req\":\"^0.61\",\"target\":\"cfg(windows)\"}],\"features\":{}}", "libm_0.2.16": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"no-panic\",\"req\":\"^0.1.35\"}],\"features\":{\"arch\":[],\"default\":[\"arch\"],\"force-soft-floats\":[],\"unstable\":[\"unstable-intrinsics\",\"unstable-float\"],\"unstable-float\":[],\"unstable-intrinsics\":[],\"unstable-public-internals\":[]}}", "libredox_0.1.16": "{\"dependencies\":[{\"name\":\"bitflags\",\"optional\":true,\"req\":\"^2\"},{\"name\":\"ioslice\",\"optional\":true,\"req\":\"^0.6\"},{\"name\":\"libc\",\"optional\":true,\"req\":\"^0.2\"},{\"name\":\"plain\",\"optional\":true,\"req\":\"^0.2\"},{\"name\":\"redox_syscall\",\"optional\":true,\"req\":\"^0.7\"}],\"features\":{\"base\":[\"libc\"],\"call\":[\"base\"],\"default\":[\"base\",\"call\",\"std\",\"redox_syscall\",\"protocol\"],\"mkns\":[\"ioslice\"],\"protocol\":[\"plain\",\"bitflags\",\"redox_syscall\"],\"std\":[\"base\"]}}", @@ -909,7 +906,7 @@ "matchers_0.2.0": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"syntax\",\"dfa-build\",\"dfa-search\"],\"name\":\"regex-automata\",\"req\":\"^0.4\"}],\"features\":{\"unicode\":[\"regex-automata/unicode\"]}}", "matchit_0.8.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"actix-router\",\"req\":\"^0.2.7\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3.4\"},{\"kind\":\"dev\",\"name\":\"gonzales\",\"req\":\"^0.0.3-beta\"},{\"features\":[\"full\"],\"kind\":\"dev\",\"name\":\"hyper\",\"req\":\"^0.14\"},{\"kind\":\"dev\",\"name\":\"path-tree\",\"req\":\"^0.2.2\"},{\"kind\":\"dev\",\"name\":\"regex\",\"req\":\"^1.5.4\"},{\"kind\":\"dev\",\"name\":\"route-recognizer\",\"req\":\"^0.3.0\"},{\"kind\":\"dev\",\"name\":\"routefinder\",\"req\":\"^0.5.2\"},{\"features\":[\"full\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"features\":[\"make\",\"util\"],\"kind\":\"dev\",\"name\":\"tower\",\"req\":\"^0.4\"}],\"features\":{\"__test_helpers\":[],\"default\":[]}}", "md-5_0.10.6": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1.0\"},{\"name\":\"digest\",\"req\":\"^0.10.7\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"digest\",\"req\":\"^0.10.7\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.2.2\"},{\"name\":\"md5-asm\",\"optional\":true,\"req\":\"^0.5\",\"target\":\"cfg(any(target_arch = \\\"x86\\\", target_arch = \\\"x86_64\\\"))\"}],\"features\":{\"asm\":[\"md5-asm\"],\"default\":[\"std\"],\"force-soft\":[],\"loongarch64_asm\":[],\"oid\":[\"digest/oid\"],\"std\":[\"digest/std\"]}}", - "md5_0.7.0": "{\"dependencies\":[],\"features\":{\"default\":[\"std\"],\"std\":[]}}", + "md5_0.8.1": "{\"dependencies\":[],\"features\":{\"default\":[\"std\"],\"std\":[]}}", "memchr_2.8.0": "{\"dependencies\":[{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.20\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1.0.3\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"libc\":[],\"logging\":[\"dep:log\"],\"rustc-dep-of-std\":[\"core\"],\"std\":[\"alloc\"],\"use_std\":[\"std\"]}}", "metrics-exporter-prometheus_0.18.1": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"std\"],\"name\":\"base64\",\"req\":\"^0.22\"},{\"default_features\":false,\"name\":\"http-body-util\",\"optional\":true,\"req\":\"^0.1\"},{\"default_features\":false,\"features\":[\"server\",\"client\"],\"name\":\"hyper\",\"optional\":true,\"req\":\"^1.8\"},{\"default_features\":false,\"features\":[\"http1\",\"rustls-native-certs\"],\"name\":\"hyper-rustls\",\"optional\":true,\"req\":\"^0.27\"},{\"default_features\":false,\"features\":[\"tokio\",\"service\",\"client\",\"client-legacy\",\"http1\"],\"name\":\"hyper-util\",\"optional\":true,\"req\":\"^0.1\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"indexmap\",\"req\":\"^2.6\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"ipnet\",\"optional\":true,\"req\":\"^2\"},{\"name\":\"metrics\",\"req\":\"^0.24\"},{\"default_features\":false,\"features\":[\"recency\",\"registry\",\"storage\"],\"name\":\"metrics-util\",\"req\":\"^0.20\"},{\"name\":\"mime\",\"optional\":true,\"req\":\"^0.3\"},{\"default_features\":false,\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"prost\",\"optional\":true,\"req\":\"^0.14\"},{\"default_features\":false,\"kind\":\"build\",\"name\":\"prost-build\",\"optional\":true,\"req\":\"^0.14\"},{\"default_features\":false,\"name\":\"prost-types\",\"optional\":true,\"req\":\"^0.14\"},{\"default_features\":false,\"name\":\"quanta\",\"req\":\"^0.12\"},{\"default_features\":false,\"features\":[\"thread_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"default_features\":false,\"name\":\"rustls\",\"optional\":true,\"req\":\"^0.23\"},{\"default_features\":false,\"name\":\"thiserror\",\"req\":\"^2\"},{\"default_features\":false,\"features\":[\"rt\",\"net\",\"time\",\"rt-multi-thread\"],\"name\":\"tokio\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"name\":\"tracing\",\"optional\":true,\"req\":\"^0.1\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"tracing\",\"req\":\"^0.1\"},{\"default_features\":false,\"features\":[\"fmt\"],\"kind\":\"dev\",\"name\":\"tracing-subscriber\",\"req\":\"^0.3\"}],\"features\":{\"_hyper-client\":[\"http-body-util\",\"hyper/client\",\"hyper-util/client\",\"hyper-util/http1\",\"hyper-util/client-legacy\",\"hyper-rustls\"],\"_hyper-server\":[\"http-body-util\",\"hyper/server\",\"hyper-util/server-auto\"],\"_push-gateway-common\":[\"async-runtime\",\"rustls\",\"tracing\",\"_hyper-client\"],\"async-runtime\":[\"tokio\",\"hyper-util/tokio\"],\"default\":[\"http-listener\",\"push-gateway\"],\"http-listener\":[\"async-runtime\",\"ipnet\",\"tracing\",\"_hyper-server\"],\"protobuf\":[\"mime\",\"prost\",\"prost-types\",\"prost-build\"],\"push-gateway\":[\"_push-gateway-common\",\"hyper-rustls/aws-lc-rs\"],\"push-gateway-no-tls-provider\":[\"_push-gateway-common\"],\"uds-listener\":[\"http-listener\"]}}", "metrics-util_0.20.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"ahash\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"aho-corasick\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"approx\",\"req\":\"^0.5\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7\"},{\"default_features\":false,\"features\":[\"alloc\",\"std\"],\"name\":\"crossbeam-epoch\",\"optional\":true,\"req\":\"^0.9\"},{\"default_features\":false,\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"crossbeam-queue\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"crossbeam-utils\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"getopts\",\"req\":\"^0.2\"},{\"default_features\":false,\"features\":[\"default-hasher\",\"raw-entry\"],\"name\":\"hashbrown\",\"optional\":true,\"req\":\"^0.16\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"indexmap\",\"optional\":true,\"req\":\"^2.6\"},{\"name\":\"metrics\",\"req\":\"^0.24\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"mockall\",\"req\":\"^0.13\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"ndarray\",\"req\":\"^0.16\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"ndarray-stats\",\"req\":\"^0.6\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"noisy_float\",\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"ordered-float\",\"optional\":true,\"req\":\"^5\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"ordered-float\",\"req\":\"^5\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"predicates\",\"req\":\"^3.1.0\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"predicates-core\",\"req\":\"^1.0.6\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"predicates-tree\",\"req\":\"^1.0.9\"},{\"default_features\":false,\"name\":\"quanta\",\"optional\":true,\"req\":\"^0.12\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck_macros\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"radix_trie\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"features\":[\"thread_rng\"],\"name\":\"rand\",\"optional\":true,\"req\":\"^0.9\"},{\"default_features\":false,\"features\":[\"thread_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"default_features\":false,\"name\":\"rand_xoshiro\",\"optional\":true,\"req\":\"^0.7\"},{\"default_features\":false,\"name\":\"sketches-ddsketch\",\"optional\":true,\"req\":\"^0.3\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sketches-ddsketch\",\"req\":\"^0.3\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"tracing\",\"req\":\"^0.1\"},{\"default_features\":false,\"features\":[\"fmt\",\"ansi\"],\"kind\":\"dev\",\"name\":\"tracing-subscriber\",\"req\":\"^0.3\"}],\"features\":{\"debugging\":[\"indexmap\",\"ordered-float\",\"registry\"],\"default\":[\"debugging\",\"layers\",\"recency\",\"registry\",\"storage\"],\"layer-filter\":[\"aho-corasick\"],\"layer-router\":[\"radix_trie\"],\"layers\":[\"layer-filter\",\"layer-router\"],\"recency\":[\"registry\",\"quanta\"],\"registry\":[\"hashbrown\",\"storage\"],\"storage\":[\"crossbeam-epoch\",\"crossbeam-utils\",\"rand\",\"rand_xoshiro\",\"sketches-ddsketch\"]}}", @@ -924,10 +921,13 @@ "mio_0.8.11": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.9.3\"},{\"name\":\"libc\",\"req\":\"^0.2.149\",\"target\":\"cfg(target_os = \\\"wasi\\\")\"},{\"name\":\"libc\",\"req\":\"^0.2.149\",\"target\":\"cfg(unix)\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.8\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8\"},{\"name\":\"wasi\",\"req\":\"^0.11.0\",\"target\":\"cfg(target_os = \\\"wasi\\\")\"},{\"features\":[\"Win32_Foundation\",\"Win32_Networking_WinSock\",\"Win32_Storage_FileSystem\",\"Win32_System_IO\",\"Win32_System_WindowsProgramming\"],\"name\":\"windows-sys\",\"req\":\"^0.48\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[\"log\"],\"net\":[],\"os-ext\":[\"os-poll\",\"windows-sys/Win32_System_Pipes\",\"windows-sys/Win32_Security\"],\"os-poll\":[]}}", "mio_1.1.1": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.11\"},{\"name\":\"libc\",\"req\":\"^0.2.178\",\"target\":\"cfg(target_os = \\\"hermit\\\")\"},{\"name\":\"libc\",\"req\":\"^0.2.178\",\"target\":\"cfg(target_os = \\\"wasi\\\")\"},{\"name\":\"libc\",\"req\":\"^0.2.178\",\"target\":\"cfg(unix)\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.8\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"name\":\"wasi\",\"req\":\"^0.11.0\",\"target\":\"cfg(target_os = \\\"wasi\\\")\"},{\"features\":[\"Wdk_Foundation\",\"Wdk_Storage_FileSystem\",\"Wdk_System_IO\",\"Win32_Foundation\",\"Win32_Networking_WinSock\",\"Win32_Storage_FileSystem\",\"Win32_Security\",\"Win32_System_IO\",\"Win32_System_WindowsProgramming\"],\"name\":\"windows-sys\",\"req\":\"^0.61\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[\"log\"],\"net\":[],\"os-ext\":[\"os-poll\",\"windows-sys/Win32_System_Pipes\",\"windows-sys/Win32_Security\"],\"os-poll\":[]}}", "mio_1.2.0": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.11\"},{\"name\":\"libc\",\"req\":\"^0.2.183\",\"target\":\"cfg(any(unix, target_os = \\\"hermit\\\", target_os = \\\"wasi\\\"))\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.8\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"name\":\"wasi\",\"req\":\"^0.11.0\",\"target\":\"cfg(target_os = \\\"wasi\\\")\"},{\"features\":[\"Wdk_Foundation\",\"Wdk_Storage_FileSystem\",\"Wdk_System_IO\",\"Win32_Foundation\",\"Win32_Networking_WinSock\",\"Win32_Storage_FileSystem\",\"Win32_Security\",\"Win32_System_IO\",\"Win32_System_WindowsProgramming\"],\"name\":\"windows-sys\",\"req\":\"^0.61\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[\"log\"],\"net\":[],\"os-ext\":[\"os-poll\",\"windows-sys/Win32_System_Pipes\",\"windows-sys/Win32_Security\"],\"os-poll\":[]}}", + "ml-kem_0.3.2": "{\"dependencies\":[{\"features\":[\"ctutils\",\"extra-sizes\"],\"name\":\"array\",\"package\":\"hybrid-array\",\"req\":\"^0.4.8\"},{\"default_features\":false,\"features\":[\"db\"],\"name\":\"const-oid\",\"optional\":true,\"req\":\"^0.10.1\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7\"},{\"features\":[\"sys_rng\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.4\"},{\"features\":[\"serde\"],\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"kem\",\"req\":\"^0.3\"},{\"features\":[\"ctutils\"],\"name\":\"module-lattice\",\"req\":\"^0.2.3\"},{\"default_features\":false,\"features\":[\"num-bigint\"],\"kind\":\"dev\",\"name\":\"num-rational\",\"req\":\"^0.4.2\"},{\"default_features\":false,\"name\":\"pkcs8\",\"optional\":true,\"req\":\"^0.11\"},{\"name\":\"rand_core\",\"req\":\"^0.10\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.208\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.125\"},{\"default_features\":false,\"name\":\"sha3\",\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.8.1\"}],\"features\":{\"alloc\":[\"module-lattice/alloc\",\"pkcs8?/alloc\"],\"default\":[\"alloc\"],\"getrandom\":[\"kem/getrandom\"],\"hazmat\":[],\"pem\":[\"pkcs8/pem\"],\"pkcs8\":[\"dep:const-oid\",\"dep:pkcs8\"],\"zeroize\":[\"module-lattice/zeroize\",\"dep:zeroize\"]}}", + "module-lattice_0.2.3": "{\"dependencies\":[{\"features\":[\"extra-sizes\"],\"name\":\"array\",\"package\":\"hybrid-array\",\"req\":\"^0.4.8\"},{\"name\":\"ctutils\",\"optional\":true,\"req\":\"^0.4\"},{\"features\":[\"sys_rng\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"num-traits\",\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.8.1\"}],\"features\":{\"alloc\":[],\"ctutils\":[\"dep:ctutils\",\"array/ctutils\"],\"zeroize\":[\"array/zeroize\",\"dep:zeroize\"]}}", "msvc_spectre_libs_0.1.3": "{\"dependencies\":[{\"kind\":\"build\",\"name\":\"cc\",\"req\":\"^1.0\",\"target\":\"cfg(all(target_os = \\\"windows\\\", target_env = \\\"msvc\\\"))\"}],\"features\":{\"error\":[]}}", "multimap_0.10.1": "{\"dependencies\":[{\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0\"}],\"features\":{\"default\":[\"serde_impl\"],\"serde_impl\":[\"serde\"]}}", "multipart_0.18.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"buf_redux\",\"optional\":true,\"req\":\"^0.8\"},{\"name\":\"clippy\",\"optional\":true,\"req\":\">=0.0, <0.1\"},{\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.5\"},{\"name\":\"httparse\",\"optional\":true,\"req\":\"^1.2\"},{\"default_features\":false,\"name\":\"hyper\",\"optional\":true,\"req\":\">=0.9, <0.11\"},{\"name\":\"iron\",\"optional\":true,\"req\":\">=0.4, <0.7\"},{\"name\":\"lazy_static\",\"optional\":true,\"req\":\"^1.2.0\"},{\"name\":\"log\",\"req\":\"^0.4\"},{\"name\":\"mime\",\"req\":\"^0.3.14\"},{\"name\":\"mime_guess\",\"req\":\"^2.0.1\"},{\"name\":\"nickel\",\"optional\":true,\"req\":\">=0.10.1\"},{\"name\":\"quick-error\",\"optional\":true,\"req\":\"^1.2\"},{\"name\":\"rand\",\"req\":\"^0.8\"},{\"name\":\"rocket\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"safemem\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"tempfile\",\"req\":\"^3\"},{\"name\":\"tiny_http\",\"optional\":true,\"req\":\"^0.6\"},{\"name\":\"twoway\",\"optional\":true,\"req\":\"^0.1\"}],\"features\":{\"bench\":[],\"client\":[],\"default\":[\"client\",\"hyper\",\"iron\",\"mock\",\"nickel\",\"server\",\"tiny_http\"],\"mock\":[],\"nightly\":[],\"server\":[\"buf_redux\",\"httparse\",\"quick-error\",\"safemem\",\"twoway\"]}}", "nix_0.29.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"assert-impl\",\"req\":\"^0.1\"},{\"name\":\"bitflags\",\"req\":\"^2.3.1\"},{\"kind\":\"dev\",\"name\":\"caps\",\"req\":\"^0.5.3\",\"target\":\"cfg(any(target_os = \\\"android\\\", target_os = \\\"linux\\\"))\"},{\"name\":\"cfg-if\",\"req\":\"^1.0\"},{\"kind\":\"build\",\"name\":\"cfg_aliases\",\"req\":\"^0.2\"},{\"features\":[\"extra_traits\"],\"name\":\"libc\",\"req\":\"^0.2.155\"},{\"name\":\"memoffset\",\"optional\":true,\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"parking_lot\",\"req\":\"^0.12\"},{\"name\":\"pin-utils\",\"optional\":true,\"req\":\"^0.1.0\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"semver\",\"req\":\"^1.0.7\"},{\"kind\":\"dev\",\"name\":\"sysctl\",\"req\":\"^0.4\",\"target\":\"cfg(target_os = \\\"freebsd\\\")\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.7.1\"}],\"features\":{\"acct\":[],\"aio\":[\"pin-utils\"],\"default\":[],\"dir\":[\"fs\"],\"env\":[],\"event\":[],\"fanotify\":[],\"feature\":[],\"fs\":[],\"hostname\":[],\"inotify\":[],\"ioctl\":[],\"kmod\":[],\"mman\":[],\"mount\":[\"uio\"],\"mqueue\":[\"fs\"],\"net\":[\"socket\"],\"personality\":[],\"poll\":[],\"process\":[],\"pthread\":[],\"ptrace\":[\"process\"],\"quota\":[],\"reboot\":[],\"resource\":[],\"sched\":[\"process\"],\"signal\":[\"process\"],\"socket\":[\"memoffset\"],\"term\":[],\"time\":[],\"ucontext\":[\"signal\"],\"uio\":[],\"user\":[\"feature\"],\"zerocopy\":[\"fs\",\"uio\"]}}", + "nix_0.31.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"assert-impl\",\"req\":\"^0.1\"},{\"name\":\"bitflags\",\"req\":\"^2.3.3\"},{\"kind\":\"dev\",\"name\":\"caps\",\"req\":\"^0.5.3\",\"target\":\"cfg(any(target_os = \\\"android\\\", target_os = \\\"linux\\\"))\"},{\"name\":\"cfg-if\",\"req\":\"^1.0\"},{\"kind\":\"build\",\"name\":\"cfg_aliases\",\"req\":\"^0.2.1\"},{\"features\":[\"extra_traits\"],\"name\":\"libc\",\"req\":\"^0.2.186\"},{\"name\":\"memoffset\",\"optional\":true,\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"parking_lot\",\"req\":\"^0.12\"},{\"name\":\"pin-utils\",\"optional\":true,\"req\":\"^0.1.0\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"semver\",\"req\":\"^1.0.7\"},{\"kind\":\"dev\",\"name\":\"sysctl\",\"req\":\"^0.4\",\"target\":\"cfg(target_os = \\\"freebsd\\\")\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.7.1\"}],\"features\":{\"acct\":[],\"aio\":[\"pin-utils\"],\"default\":[],\"dir\":[\"fs\"],\"env\":[],\"event\":[\"poll\"],\"fanotify\":[],\"feature\":[],\"fs\":[],\"hostname\":[],\"inotify\":[],\"ioctl\":[],\"kmod\":[],\"mman\":[],\"mount\":[\"uio\"],\"mqueue\":[\"fs\"],\"net\":[\"socket\"],\"personality\":[],\"poll\":[],\"process\":[],\"pthread\":[],\"ptrace\":[\"process\"],\"quota\":[],\"reboot\":[],\"resource\":[],\"sched\":[\"process\"],\"signal\":[\"process\"],\"socket\":[\"memoffset\"],\"syslog\":[],\"term\":[],\"time\":[],\"ucontext\":[\"signal\"],\"uio\":[],\"user\":[\"feature\"],\"zerocopy\":[\"fs\",\"uio\"]}}", "nom_7.1.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"memchr\",\"req\":\"^2.3\"},{\"default_features\":false,\"name\":\"minimal-lexical\",\"req\":\"^0.2.0\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.0.0\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"docsrs\":[],\"std\":[\"alloc\",\"memchr/std\",\"minimal-lexical/std\"]}}", "notify-types_2.1.0": "{\"dependencies\":[{\"name\":\"bitflags\",\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"insta\",\"req\":\"^1.34.0\"},{\"kind\":\"dev\",\"name\":\"rstest\",\"req\":\"^0.26.0\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.89\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.39\"},{\"name\":\"web-time\",\"optional\":true,\"req\":\"^1.1.0\"}],\"features\":{\"serde\":[\"dep:serde\",\"bitflags/serde\"],\"serialization-compat-6\":[]}}", "notify_8.2.0": "{\"dependencies\":[{\"name\":\"bitflags\",\"req\":\"^2.7.0\",\"target\":\"cfg(target_os=\\\"macos\\\")\"},{\"name\":\"crossbeam-channel\",\"optional\":true,\"req\":\"^0.5.0\"},{\"name\":\"flume\",\"optional\":true,\"req\":\"^0.11.1\"},{\"name\":\"fsevent-sys\",\"optional\":true,\"req\":\"^4.0.0\",\"target\":\"cfg(target_os=\\\"macos\\\")\"},{\"default_features\":false,\"name\":\"inotify\",\"req\":\"^0.11.0\",\"target\":\"cfg(any(target_os=\\\"linux\\\", target_os=\\\"android\\\"))\"},{\"kind\":\"dev\",\"name\":\"insta\",\"req\":\"^1.34.0\"},{\"name\":\"kqueue\",\"req\":\"^1.1.1\",\"target\":\"cfg(any(target_os=\\\"freebsd\\\", target_os=\\\"openbsd\\\", target_os = \\\"netbsd\\\", target_os = \\\"dragonflybsd\\\", target_os = \\\"ios\\\"))\"},{\"name\":\"kqueue\",\"optional\":true,\"req\":\"^1.1.1\",\"target\":\"cfg(target_os=\\\"macos\\\")\"},{\"name\":\"libc\",\"req\":\"^0.2.4\"},{\"name\":\"log\",\"req\":\"^0.4.17\"},{\"features\":[\"os-ext\"],\"name\":\"mio\",\"req\":\"^1.0\",\"target\":\"cfg(any(target_os=\\\"freebsd\\\", target_os=\\\"openbsd\\\", target_os = \\\"netbsd\\\", target_os = \\\"dragonflybsd\\\", target_os = \\\"ios\\\"))\"},{\"features\":[\"os-ext\"],\"name\":\"mio\",\"req\":\"^1.0\",\"target\":\"cfg(any(target_os=\\\"linux\\\", target_os=\\\"android\\\"))\"},{\"features\":[\"os-ext\"],\"name\":\"mio\",\"optional\":true,\"req\":\"^1.0\",\"target\":\"cfg(target_os=\\\"macos\\\")\"},{\"kind\":\"dev\",\"name\":\"nix\",\"req\":\"^0.29.0\"},{\"name\":\"notify-types\",\"req\":\"^2.0.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.39\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.10.0\"},{\"kind\":\"dev\",\"name\":\"trash\",\"req\":\"^5.2.2\",\"target\":\"cfg(target_os = \\\"windows\\\")\"},{\"name\":\"walkdir\",\"req\":\"^2.4.0\"},{\"features\":[\"Win32_System_Threading\",\"Win32_Foundation\",\"Win32_Storage_FileSystem\",\"Win32_Security\",\"Win32_System_WindowsProgramming\",\"Win32_System_IO\"],\"name\":\"windows-sys\",\"req\":\"^0.60.1\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[\"macos_fsevent\"],\"macos_fsevent\":[\"fsevent-sys\"],\"macos_kqueue\":[\"kqueue\",\"mio\"],\"serde\":[\"notify-types/serde\"],\"serialization-compat-6\":[\"notify-types/serialization-compat-6\"]}}", @@ -952,7 +952,6 @@ "olpc-cjson_0.1.4": "{\"dependencies\":[{\"name\":\"serde\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"serde_derive\",\"req\":\"^1\"},{\"name\":\"serde_json\",\"req\":\"^1\"},{\"name\":\"unicode-normalization\",\"req\":\"^0.1\"}],\"features\":{}}", "once_cell_1.21.4": "{\"dependencies\":[{\"name\":\"critical-section\",\"optional\":true,\"req\":\"^1.1.3\"},{\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"critical-section\",\"req\":\"^1.1.3\"},{\"default_features\":false,\"name\":\"parking_lot_core\",\"optional\":true,\"req\":\"^0.9.10\"},{\"default_features\":false,\"name\":\"portable-atomic\",\"optional\":true,\"req\":\"^1.8\"},{\"kind\":\"dev\",\"name\":\"regex\",\"req\":\"^1.10.6\"}],\"features\":{\"alloc\":[\"race\"],\"atomic-polyfill\":[\"critical-section\"],\"critical-section\":[\"dep:critical-section\",\"portable-atomic\"],\"default\":[\"std\"],\"parking_lot\":[\"dep:parking_lot_core\"],\"portable-atomic\":[\"dep:portable-atomic\"],\"race\":[],\"std\":[\"alloc\"],\"unstable\":[]}}", "once_cell_polyfill_1.70.2": "{\"dependencies\":[],\"features\":{\"default\":[]}}", - "opaque-debug_0.3.1": "{\"dependencies\":[],\"features\":{}}", "openssh_0.11.6": "{\"dependencies\":[{\"name\":\"libc\",\"req\":\"^0.2.137\"},{\"name\":\"once_cell\",\"req\":\"^1.8.0\"},{\"name\":\"openssh-mux-client\",\"optional\":true,\"req\":\"^0.17.6\"},{\"kind\":\"dev\",\"name\":\"openssh-sftp-client\",\"req\":\"^0.15.0\"},{\"kind\":\"dev\",\"name\":\"regex\",\"req\":\"^1\"},{\"name\":\"shell-escape\",\"req\":\"^0.1.5\"},{\"name\":\"tempfile\",\"req\":\"^3.9.0\"},{\"name\":\"thiserror\",\"req\":\"^2.0.0\"},{\"features\":[\"process\",\"io-util\",\"macros\",\"net\"],\"name\":\"tokio\",\"req\":\"^1.36.0\"},{\"features\":[\"full\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"name\":\"tracing\",\"optional\":true,\"req\":\"^0.1\"}],\"features\":{\"default\":[\"process-mux\"],\"native-mux\":[\"openssh-mux-client\"],\"process-mux\":[]}}", "openssl-probe_0.2.1": "{\"dependencies\":[],\"features\":{}}", "opentelemetry-otlp_0.32.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"async-trait\",\"req\":\"^0.1\"},{\"name\":\"flate2\",\"optional\":true,\"req\":\"^1.1.2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"futures-util\",\"req\":\"^0.3\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"http\",\"optional\":true,\"req\":\"^1.1\"},{\"name\":\"httpdate\",\"optional\":true,\"req\":\"^1.0.3\"},{\"default_features\":false,\"name\":\"opentelemetry\",\"req\":\"^0.32\"},{\"default_features\":false,\"name\":\"opentelemetry-http\",\"optional\":true,\"req\":\"^0.32\"},{\"default_features\":false,\"name\":\"opentelemetry-proto\",\"req\":\"^0.32\"},{\"default_features\":false,\"name\":\"opentelemetry_sdk\",\"req\":\"^0.32\"},{\"default_features\":false,\"features\":[\"trace\",\"testing\"],\"kind\":\"dev\",\"name\":\"opentelemetry_sdk\",\"req\":\"^0.32\"},{\"name\":\"prost\",\"optional\":true,\"req\":\"^0.14\"},{\"default_features\":false,\"name\":\"reqwest\",\"optional\":true,\"req\":\"^0.13.1\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"name\":\"serde_json\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"temp-env\",\"req\":\"^0.3.6\"},{\"default_features\":false,\"name\":\"thiserror\",\"req\":\"^2\"},{\"default_features\":false,\"features\":[\"sync\",\"rt\"],\"name\":\"tokio\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"macros\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"features\":[\"net\"],\"kind\":\"dev\",\"name\":\"tokio-stream\",\"req\":\"^0.1\"},{\"default_features\":false,\"name\":\"tonic\",\"optional\":true,\"req\":\"^0.14.1\"},{\"default_features\":false,\"features\":[\"router\",\"server\"],\"kind\":\"dev\",\"name\":\"tonic\",\"req\":\"^0.14.1\"},{\"name\":\"tonic-types\",\"optional\":true,\"req\":\"^0.14.1\"},{\"name\":\"zstd\",\"optional\":true,\"req\":\"^0.13\"}],\"features\":{\"default\":[\"http-proto\",\"reqwest-blocking-client\",\"trace\",\"metrics\",\"logs\",\"internal-logs\"],\"experimental-grpc-retry\":[\"grpc-tonic\",\"opentelemetry_sdk/experimental_async_runtime\",\"opentelemetry_sdk/rt-tokio\"],\"experimental-http-retry\":[\"opentelemetry_sdk/experimental_async_runtime\",\"opentelemetry_sdk/rt-tokio\",\"tokio\",\"httpdate\"],\"grpc-tonic\":[\"tonic\",\"tonic-types\",\"prost\",\"http\",\"tokio\",\"opentelemetry-proto/gen-tonic\"],\"gzip-http\":[\"flate2\"],\"gzip-tonic\":[\"tonic/gzip\"],\"http-json\":[\"serde_json\",\"prost\",\"opentelemetry-http\",\"opentelemetry-proto/gen-tonic-messages\",\"opentelemetry-proto/with-serde\",\"http\",\"trace\",\"metrics\"],\"http-proto\":[\"prost\",\"opentelemetry-http\",\"opentelemetry-proto/gen-tonic-messages\",\"http\",\"trace\",\"metrics\"],\"hyper-client\":[\"opentelemetry-http/hyper\"],\"integration-testing\":[\"tonic\",\"prost\",\"tokio/full\",\"trace\",\"logs\"],\"internal-logs\":[\"opentelemetry_sdk/internal-logs\",\"opentelemetry/internal-logs\"],\"logs\":[\"opentelemetry/logs\",\"opentelemetry_sdk/logs\",\"opentelemetry-proto/logs\"],\"metrics\":[\"opentelemetry/metrics\",\"opentelemetry_sdk/metrics\",\"opentelemetry-proto/metrics\"],\"reqwest-blocking-client\":[\"reqwest/blocking\",\"opentelemetry-http/reqwest-blocking\"],\"reqwest-client\":[\"reqwest\",\"opentelemetry-http/reqwest\"],\"reqwest-rustls\":[\"reqwest\",\"opentelemetry-http/reqwest-rustls\"],\"reqwest-rustls-webpki-roots\":[\"reqwest\",\"opentelemetry-http/reqwest-rustls-webpki-roots\"],\"serialize\":[\"serde\",\"serde_json\"],\"tls\":[\"tls-ring\"],\"tls-aws-lc\":[\"tonic/tls-aws-lc\"],\"tls-provider-agnostic\":[\"tonic/_tls-any\"],\"tls-ring\":[\"tonic/tls-ring\"],\"tls-roots\":[\"tonic/tls-native-roots\"],\"tls-webpki-roots\":[\"tonic/tls-webpki-roots\"],\"trace\":[\"opentelemetry/trace\",\"opentelemetry_sdk/trace\",\"opentelemetry-proto/trace\"],\"zstd-http\":[\"zstd\"],\"zstd-tonic\":[\"tonic/zstd\"]}}", @@ -962,17 +961,17 @@ "ordered-float_2.10.1": "{\"dependencies\":[{\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.0.0\"},{\"default_features\":false,\"name\":\"num-traits\",\"req\":\"^0.2.1\"},{\"name\":\"proptest\",\"optional\":true,\"req\":\"^1.0.0\"},{\"default_features\":false,\"name\":\"rand\",\"optional\":true,\"req\":\"^0.8.3\"},{\"default_features\":false,\"features\":[\"size_32\"],\"name\":\"rkyv\",\"optional\":true,\"req\":\"^0.7\"},{\"name\":\"schemars\",\"optional\":true,\"req\":\"^0.6.5\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0\"}],\"features\":{\"default\":[\"std\"],\"randtest\":[\"rand/std\",\"rand/std_rng\"],\"std\":[\"num-traits/std\"]}}", "outref_0.5.2": "{\"dependencies\":[],\"features\":{}}", "owo-colors_4.3.0": "{\"dependencies\":[{\"name\":\"supports-color\",\"optional\":true,\"req\":\"^3.0.0\"},{\"name\":\"supports-color-2\",\"optional\":true,\"package\":\"supports-color\",\"req\":\"^2.0\"}],\"features\":{\"alloc\":[],\"supports-colors\":[\"dep:supports-color-2\",\"supports-color\"]}}", - "p256_0.13.2": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"blobby\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.4\"},{\"default_features\":false,\"features\":[\"der\"],\"name\":\"ecdsa-core\",\"optional\":true,\"package\":\"ecdsa\",\"req\":\"^0.16\"},{\"default_features\":false,\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"ecdsa-core\",\"package\":\"ecdsa\",\"req\":\"^0.16\"},{\"default_features\":false,\"features\":[\"hazmat\",\"sec1\"],\"name\":\"elliptic-curve\",\"req\":\"^0.13.1\"},{\"name\":\"hex-literal\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4\"},{\"name\":\"primeorder\",\"optional\":true,\"req\":\"^0.13\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"primeorder\",\"req\":\"^0.13\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"features\":[\"getrandom\"],\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.10\"}],\"features\":{\"alloc\":[\"ecdsa-core?/alloc\",\"elliptic-curve/alloc\"],\"arithmetic\":[\"dep:primeorder\",\"elliptic-curve/arithmetic\"],\"bits\":[\"arithmetic\",\"elliptic-curve/bits\"],\"default\":[\"arithmetic\",\"ecdsa\",\"pem\",\"std\"],\"digest\":[\"ecdsa-core/digest\",\"ecdsa-core/hazmat\"],\"ecdh\":[\"arithmetic\",\"elliptic-curve/ecdh\"],\"ecdsa\":[\"arithmetic\",\"ecdsa-core/signing\",\"ecdsa-core/verifying\",\"sha256\"],\"expose-field\":[\"arithmetic\"],\"hash2curve\":[\"arithmetic\",\"elliptic-curve/hash2curve\"],\"jwk\":[\"elliptic-curve/jwk\"],\"pem\":[\"elliptic-curve/pem\",\"ecdsa-core/pem\",\"pkcs8\"],\"pkcs8\":[\"ecdsa-core?/pkcs8\",\"elliptic-curve/pkcs8\"],\"serde\":[\"ecdsa-core?/serde\",\"elliptic-curve/serde\",\"primeorder?/serde\",\"serdect\"],\"sha256\":[\"digest\",\"sha2\"],\"std\":[\"alloc\",\"ecdsa-core?/std\",\"elliptic-curve/std\"],\"test-vectors\":[\"dep:hex-literal\"],\"voprf\":[\"elliptic-curve/voprf\",\"sha2\"]}}", - "p384_0.13.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"blobby\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.4\"},{\"default_features\":false,\"features\":[\"der\"],\"name\":\"ecdsa-core\",\"optional\":true,\"package\":\"ecdsa\",\"req\":\"^0.16\"},{\"default_features\":false,\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"ecdsa-core\",\"package\":\"ecdsa\",\"req\":\"^0.16\"},{\"default_features\":false,\"features\":[\"hazmat\",\"sec1\"],\"name\":\"elliptic-curve\",\"req\":\"^0.13\"},{\"name\":\"hex-literal\",\"optional\":true,\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3\"},{\"name\":\"primeorder\",\"req\":\"^0.13\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.1\"},{\"features\":[\"getrandom\"],\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.10\"}],\"features\":{\"alloc\":[\"ecdsa-core?/alloc\",\"elliptic-curve/alloc\"],\"arithmetic\":[\"elliptic-curve/arithmetic\",\"elliptic-curve/digest\"],\"bits\":[\"arithmetic\",\"elliptic-curve/bits\"],\"default\":[\"arithmetic\",\"ecdh\",\"ecdsa\",\"pem\",\"std\"],\"digest\":[\"ecdsa-core/digest\",\"ecdsa-core/hazmat\"],\"ecdh\":[\"arithmetic\",\"elliptic-curve/ecdh\"],\"ecdsa\":[\"arithmetic\",\"ecdsa-core/signing\",\"ecdsa-core/verifying\",\"sha384\"],\"expose-field\":[\"arithmetic\"],\"hash2curve\":[\"arithmetic\",\"elliptic-curve/hash2curve\"],\"jwk\":[\"elliptic-curve/jwk\"],\"pem\":[\"elliptic-curve/pem\",\"ecdsa-core/pem\",\"pkcs8\"],\"pkcs8\":[\"ecdsa-core/pkcs8\",\"elliptic-curve/pkcs8\"],\"serde\":[\"ecdsa-core/serde\",\"elliptic-curve/serde\",\"serdect\"],\"sha384\":[\"digest\",\"sha2\"],\"std\":[\"alloc\",\"ecdsa-core?/std\",\"elliptic-curve/std\"],\"test-vectors\":[\"hex-literal\"],\"voprf\":[\"elliptic-curve/voprf\",\"sha2\"]}}", - "p521_0.13.3": "{\"dependencies\":[{\"name\":\"base16ct\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"blobby\",\"req\":\"^0.3\"},{\"default_features\":false,\"features\":[\"der\"],\"name\":\"ecdsa-core\",\"optional\":true,\"package\":\"ecdsa\",\"req\":\"^0.16.5\"},{\"default_features\":false,\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"ecdsa-core\",\"package\":\"ecdsa\",\"req\":\"^0.16\"},{\"default_features\":false,\"features\":[\"hazmat\",\"sec1\"],\"name\":\"elliptic-curve\",\"req\":\"^0.13\"},{\"name\":\"hex-literal\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4\"},{\"name\":\"primeorder\",\"optional\":true,\"req\":\"^0.13.3\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"primeorder\",\"req\":\"^0.13.3\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.3\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.6\"},{\"features\":[\"getrandom\"],\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.10\"}],\"features\":{\"alloc\":[\"ecdsa-core?/alloc\",\"elliptic-curve/alloc\"],\"arithmetic\":[\"dep:primeorder\"],\"default\":[\"arithmetic\",\"ecdsa\",\"getrandom\",\"pem\",\"std\"],\"digest\":[\"ecdsa-core/digest\",\"ecdsa-core/hazmat\"],\"ecdh\":[\"arithmetic\",\"elliptic-curve/ecdh\"],\"ecdsa\":[\"arithmetic\",\"ecdsa-core/signing\",\"ecdsa-core/verifying\",\"sha512\"],\"getrandom\":[\"rand_core/getrandom\"],\"hash2curve\":[\"arithmetic\",\"elliptic-curve/hash2curve\"],\"jwk\":[\"elliptic-curve/jwk\"],\"pem\":[\"elliptic-curve/pem\",\"pkcs8\"],\"pkcs8\":[\"ecdsa-core?/pkcs8\",\"elliptic-curve/pkcs8\"],\"serde\":[\"ecdsa-core?/serde\",\"elliptic-curve/serde\",\"primeorder?/serde\",\"serdect\"],\"sha512\":[\"digest\",\"dep:sha2\"],\"std\":[\"alloc\",\"ecdsa-core?/std\",\"elliptic-curve/std\"],\"test-vectors\":[\"dep:hex-literal\"],\"voprf\":[\"elliptic-curve/voprf\",\"dep:sha2\"]}}", + "p256_0.14.0-rc.10": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7\"},{\"default_features\":false,\"features\":[\"der\"],\"name\":\"ecdsa-core\",\"optional\":true,\"package\":\"ecdsa\",\"req\":\"^0.17.0-rc.17\"},{\"default_features\":false,\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"ecdsa-core\",\"package\":\"ecdsa\",\"req\":\"^0.17.0-rc.17\"},{\"default_features\":false,\"features\":[\"sec1\"],\"name\":\"elliptic-curve\",\"req\":\"^0.14.0-rc.33\"},{\"name\":\"hash2curve\",\"optional\":true,\"req\":\"^0.14.0-rc.12\"},{\"name\":\"hex-literal\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"primefield\",\"optional\":true,\"req\":\"^0.14.0-rc.10\"},{\"kind\":\"dev\",\"name\":\"primefield\",\"req\":\"^0.14.0-rc.10\"},{\"name\":\"primeorder\",\"optional\":true,\"req\":\"^0.14.0-rc.10\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"primeorder\",\"req\":\"^0.14.0-rc.10\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.11\"}],\"features\":{\"alloc\":[\"ecdsa-core?/alloc\",\"elliptic-curve/alloc\",\"primeorder?/alloc\"],\"arithmetic\":[\"dep:primefield\",\"dep:primeorder\",\"elliptic-curve/arithmetic\"],\"default\":[\"arithmetic\",\"ecdsa\",\"pem\",\"precomputed-tables\",\"std\"],\"digest\":[\"ecdsa-core/digest\",\"ecdsa-core/hazmat\"],\"ecdh\":[\"arithmetic\",\"elliptic-curve/ecdh\"],\"ecdsa\":[\"arithmetic\",\"ecdsa-core/algorithm\",\"sha256\"],\"expose-field\":[\"arithmetic\"],\"getrandom\":[\"elliptic-curve/getrandom\"],\"group-digest\":[\"hash2curve\",\"sha2\"],\"hash2curve\":[\"arithmetic\",\"dep:hash2curve\",\"primeorder/hash2curve\"],\"oprf\":[\"group-digest\"],\"pem\":[\"elliptic-curve/pem\",\"ecdsa-core/pem\",\"pkcs8\"],\"pkcs8\":[\"ecdsa-core?/pkcs8\",\"elliptic-curve/pkcs8\"],\"precomputed-tables\":[\"arithmetic\",\"primeorder/basepoint-table\"],\"serde\":[\"ecdsa-core?/serde\",\"elliptic-curve/serde\",\"primeorder?/serde\",\"serdect\"],\"sha256\":[\"digest\",\"sha2\"],\"std\":[\"alloc\",\"ecdsa-core?/std\",\"elliptic-curve/std\",\"getrandom\"],\"test-vectors\":[\"dep:hex-literal\"]}}", + "p384_0.14.0-rc.10": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7\"},{\"default_features\":false,\"features\":[\"der\"],\"name\":\"ecdsa-core\",\"optional\":true,\"package\":\"ecdsa\",\"req\":\"^0.17.0-rc.17\"},{\"default_features\":false,\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"ecdsa-core\",\"package\":\"ecdsa\",\"req\":\"^0.17.0-rc.17\"},{\"default_features\":false,\"features\":[\"sec1\"],\"name\":\"elliptic-curve\",\"req\":\"^0.14.0-rc.33\"},{\"default_features\":false,\"name\":\"fiat-crypto\",\"req\":\"^0.3\",\"target\":\"cfg(not(p384_backend = \\\"bignum\\\"))\"},{\"name\":\"hash2curve\",\"optional\":true,\"req\":\"^0.14.0-rc.12\"},{\"name\":\"hex-literal\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"primefield\",\"optional\":true,\"req\":\"^0.14.0-rc.10\"},{\"name\":\"primeorder\",\"optional\":true,\"req\":\"^0.14.0-rc.10\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"primeorder\",\"req\":\"^0.14.0-rc.10\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.11\"},{\"default_features\":false,\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.11\"}],\"features\":{\"alloc\":[\"ecdsa-core?/alloc\",\"elliptic-curve/alloc\",\"primeorder?/alloc\"],\"arithmetic\":[\"dep:primefield\",\"dep:primeorder\",\"elliptic-curve/arithmetic\",\"elliptic-curve/digest\"],\"default\":[\"arithmetic\",\"ecdsa\",\"pem\",\"precomputed-tables\",\"std\"],\"digest\":[\"ecdsa-core/digest\",\"ecdsa-core/hazmat\"],\"ecdh\":[\"arithmetic\",\"elliptic-curve/ecdh\"],\"ecdsa\":[\"arithmetic\",\"ecdsa-core/algorithm\",\"sha384\"],\"expose-field\":[\"arithmetic\"],\"getrandom\":[\"ecdsa-core?/getrandom\",\"elliptic-curve/getrandom\"],\"group-digest\":[\"hash2curve\",\"sha2\"],\"hash2curve\":[\"arithmetic\",\"dep:hash2curve\",\"primeorder/hash2curve\"],\"oprf\":[\"group-digest\"],\"pem\":[\"elliptic-curve/pem\",\"ecdsa-core/pem\",\"pkcs8\"],\"pkcs8\":[\"ecdsa-core/pkcs8\",\"elliptic-curve/pkcs8\"],\"precomputed-tables\":[\"arithmetic\",\"primeorder/basepoint-table\"],\"serde\":[\"ecdsa-core?/serde\",\"elliptic-curve/serde\",\"primeorder?/serde\",\"serdect\"],\"sha384\":[\"digest\",\"sha2\"],\"std\":[\"alloc\",\"ecdsa-core?/std\",\"elliptic-curve/std\",\"getrandom\"],\"test-vectors\":[\"hex-literal\"]}}", + "p521_0.14.0-rc.10": "{\"dependencies\":[{\"name\":\"base16ct\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.7\"},{\"default_features\":false,\"features\":[\"der\"],\"name\":\"ecdsa-core\",\"optional\":true,\"package\":\"ecdsa\",\"req\":\"^0.17.0-rc.17\"},{\"default_features\":false,\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"ecdsa-core\",\"package\":\"ecdsa\",\"req\":\"^0.17.0-rc.17\"},{\"default_features\":false,\"features\":[\"sec1\"],\"name\":\"elliptic-curve\",\"req\":\"^0.14.0-rc.33\"},{\"name\":\"hash2curve\",\"optional\":true,\"req\":\"^0.14.0-rc.12\"},{\"name\":\"hex-literal\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"primefield\",\"optional\":true,\"req\":\"^0.14.0-rc.10\"},{\"name\":\"primeorder\",\"optional\":true,\"req\":\"^0.14.0-rc.10\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"primeorder\",\"req\":\"^0.14.0-rc.10\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.11\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.11\"}],\"features\":{\"alloc\":[\"ecdsa-core?/alloc\",\"elliptic-curve/alloc\",\"primeorder?/alloc\"],\"arithmetic\":[\"dep:primefield\",\"dep:primeorder\"],\"default\":[\"arithmetic\",\"ecdsa\",\"pem\",\"precomputed-tables\",\"std\"],\"digest\":[\"ecdsa-core/digest\",\"ecdsa-core/hazmat\"],\"ecdh\":[\"arithmetic\",\"elliptic-curve/ecdh\"],\"ecdsa\":[\"arithmetic\",\"ecdsa-core/algorithm\",\"sha512\"],\"expose-field\":[\"arithmetic\"],\"getrandom\":[\"ecdsa-core?/getrandom\",\"elliptic-curve/getrandom\"],\"group-digest\":[\"hash2curve\",\"dep:sha2\"],\"hash2curve\":[\"arithmetic\",\"dep:hash2curve\",\"primeorder/hash2curve\"],\"oprf\":[\"group-digest\"],\"pem\":[\"elliptic-curve/pem\",\"pkcs8\"],\"pkcs8\":[\"ecdsa-core?/pkcs8\",\"elliptic-curve/pkcs8\"],\"precomputed-tables\":[\"arithmetic\",\"primeorder/basepoint-table\"],\"serde\":[\"ecdsa-core?/serde\",\"elliptic-curve/serde\",\"primeorder?/serde\",\"serdect\"],\"sha512\":[\"digest\",\"dep:sha2\"],\"std\":[\"alloc\",\"ecdsa-core?/std\",\"elliptic-curve/std\",\"getrandom\"],\"test-vectors\":[\"dep:hex-literal\"]}}", "pageant_0.2.0": "{\"dependencies\":[{\"name\":\"byteorder\",\"req\":\"^1.4\",\"target\":\"cfg(windows)\"},{\"name\":\"bytes\",\"req\":\"^1.7\",\"target\":\"cfg(windows)\"},{\"name\":\"delegate\",\"req\":\"^0.13\",\"target\":\"cfg(windows)\"},{\"name\":\"futures\",\"req\":\"^0.3\",\"target\":\"cfg(windows)\"},{\"name\":\"log\",\"req\":\"^0.4.11\",\"target\":\"cfg(windows)\"},{\"name\":\"rand\",\"req\":\"^0.8\",\"target\":\"cfg(windows)\"},{\"features\":[\"oid\"],\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.10.6\",\"target\":\"cfg(windows)\"},{\"name\":\"thiserror\",\"req\":\"^1.0.30\"},{\"name\":\"tokio\",\"req\":\"^1.17.0\",\"target\":\"cfg(windows)\"},{\"features\":[\"Win32_Security\"],\"name\":\"windows\",\"req\":\"^0.62\",\"target\":\"cfg(windows)\"},{\"name\":\"windows-strings\",\"optional\":true,\"req\":\"^0.5\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[\"wmmessage\",\"namedpipes\"],\"namedpipes\":[\"tokio/net\",\"tokio/time\",\"dep:sha2\",\"dep:windows-strings\",\"windows/Win32_Security_Authentication_Identity\",\"windows/Win32_Security_Cryptography\"],\"wmmessage\":[\"tokio/rt\",\"tokio/io-util\",\"windows/Win32_UI_WindowsAndMessaging\",\"windows/Win32_System_Memory\",\"windows/Win32_System_Threading\",\"windows/Win32_System_DataExchange\"]}}", "parking_2.2.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"easy-parallel\",\"req\":\"^3.0.0\"},{\"name\":\"loom\",\"optional\":true,\"req\":\"^0.7\",\"target\":\"cfg(loom)\"}],\"features\":{}}", "parking_lot_0.12.5": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1.3.3\"},{\"name\":\"lock_api\",\"req\":\"^0.4.14\"},{\"name\":\"parking_lot_core\",\"req\":\"^0.9.12\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.3\"}],\"features\":{\"arc_lock\":[\"lock_api/arc_lock\"],\"deadlock_detection\":[\"parking_lot_core/deadlock_detection\"],\"default\":[],\"hardware-lock-elision\":[],\"nightly\":[\"parking_lot_core/nightly\",\"lock_api/nightly\"],\"owning_ref\":[\"lock_api/owning_ref\"],\"send_guard\":[],\"serde\":[\"lock_api/serde\"]}}", "parking_lot_core_0.9.12": "{\"dependencies\":[{\"name\":\"backtrace\",\"optional\":true,\"req\":\"^0.3.60\"},{\"name\":\"cfg-if\",\"req\":\"^1.0.0\"},{\"name\":\"libc\",\"req\":\"^0.2.95\",\"target\":\"cfg(unix)\"},{\"name\":\"petgraph\",\"optional\":true,\"req\":\"^0.6.0\"},{\"name\":\"redox_syscall\",\"req\":\"^0.5\",\"target\":\"cfg(target_os = \\\"redox\\\")\"},{\"name\":\"smallvec\",\"req\":\"^1.6.1\"},{\"name\":\"windows-link\",\"req\":\"^0.2.0\",\"target\":\"cfg(windows)\"}],\"features\":{\"deadlock_detection\":[\"petgraph\",\"backtrace\"],\"nightly\":[]}}", - "password-hash_0.5.0": "{\"dependencies\":[{\"name\":\"base64ct\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.6.4\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2\"}],\"features\":{\"alloc\":[\"base64ct/alloc\"],\"default\":[\"rand_core\"],\"getrandom\":[\"rand_core/getrandom\"],\"std\":[\"alloc\",\"base64ct/std\",\"rand_core/std\"]}}", + "password-hash_0.6.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"phc\",\"optional\":true,\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"}],\"features\":{\"alloc\":[\"phc?/alloc\"],\"getrandom\":[\"dep:getrandom\",\"phc?/getrandom\"],\"rand_core\":[\"dep:rand_core\",\"phc?/rand_core\"]}}", "paste_1.0.15": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"paste-test-suite\",\"req\":\"^0\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1.0\"},{\"features\":[\"diff\"],\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.49\"}],\"features\":{}}", - "pastey_0.1.1": "{\"dependencies\":[],\"features\":{}}", "pbkdf2_0.12.2": "{\"dependencies\":[{\"features\":[\"mac\"],\"name\":\"digest\",\"req\":\"^0.10.7\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4.0\"},{\"default_features\":false,\"name\":\"hmac\",\"optional\":true,\"req\":\"^0.12\"},{\"kind\":\"dev\",\"name\":\"hmac\",\"req\":\"^0.12\"},{\"default_features\":false,\"features\":[\"rand_core\"],\"name\":\"password-hash\",\"optional\":true,\"req\":\"^0.5\"},{\"name\":\"rayon\",\"optional\":true,\"req\":\"^1.7\"},{\"default_features\":false,\"name\":\"sha1\",\"optional\":true,\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"sha1\",\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"streebog\",\"req\":\"^0.10\"}],\"features\":{\"default\":[\"hmac\"],\"parallel\":[\"rayon\",\"std\"],\"simple\":[\"hmac\",\"password-hash\",\"sha2\"],\"std\":[\"password-hash/std\"]}}", + "pbkdf2_0.13.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"belt-hash\",\"req\":\"^0.2\"},{\"features\":[\"mac\"],\"name\":\"digest\",\"req\":\"^0.11\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"hmac\",\"optional\":true,\"req\":\"^0.13\"},{\"kind\":\"dev\",\"name\":\"hmac\",\"req\":\"^0.13\"},{\"name\":\"kdf\",\"optional\":true,\"req\":\"^0.1\"},{\"default_features\":false,\"features\":[\"base64\"],\"name\":\"mcf\",\"optional\":true,\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"password-hash\",\"optional\":true,\"req\":\"^0.6\"},{\"kind\":\"dev\",\"name\":\"sha1\",\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.11\"},{\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.11\"},{\"kind\":\"dev\",\"name\":\"streebog\",\"req\":\"^0.11\"}],\"features\":{\"alloc\":[\"mcf?/alloc\",\"password-hash?/alloc\"],\"default\":[\"hmac\"],\"getrandom\":[\"password-hash/getrandom\"],\"kdf\":[\"sha2\",\"dep:kdf\"],\"mcf\":[\"sha2\",\"password-hash\",\"dep:mcf\"],\"phc\":[\"password-hash/phc\",\"sha2\"],\"rand_core\":[\"password-hash/rand_core\"],\"sha2\":[\"hmac\",\"dep:sha2\"]}}", "pem-rfc7468_0.7.0": "{\"dependencies\":[{\"name\":\"base64ct\",\"req\":\"^1.4\"}],\"features\":{\"alloc\":[\"base64ct/alloc\"],\"std\":[\"alloc\",\"base64ct/std\"]}}", "pem-rfc7468_1.0.0": "{\"dependencies\":[{\"name\":\"base64ct\",\"req\":\"^1.4\"}],\"features\":{\"alloc\":[\"base64ct/alloc\"],\"std\":[\"alloc\",\"base64ct/std\"]}}", "pem_3.0.6": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"base64\",\"req\":\"^0.22.0\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3.0\"},{\"default_features\":false,\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1\"}],\"features\":{\"default\":[\"std\"],\"serde\":[\"dep:serde_core\"],\"std\":[\"base64/std\",\"serde_core?/std\"]}}", @@ -983,20 +982,21 @@ "pest_meta_2.8.6": "{\"dependencies\":[{\"kind\":\"build\",\"name\":\"cargo\",\"optional\":true,\"req\":\"^0.81.0\"},{\"name\":\"pest\",\"req\":\"^2.8.6\"},{\"default_features\":false,\"kind\":\"build\",\"name\":\"sha2\",\"req\":\"^0.10\"}],\"features\":{\"default\":[],\"grammar-extras\":[],\"not-bootstrap-in-src\":[\"dep:cargo\"]}}", "petgraph_0.8.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"ahash\",\"req\":\"^0.7.2\"},{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1.3.3\"},{\"kind\":\"dev\",\"name\":\"defmac\",\"req\":\"^0.2.1\"},{\"name\":\"dot-parser\",\"optional\":true,\"req\":\"^0.5.1\"},{\"name\":\"dot-parser-macros\",\"optional\":true,\"req\":\"^0.5.1\"},{\"default_features\":false,\"name\":\"fixedbitset\",\"req\":\"^0.5.7\"},{\"kind\":\"dev\",\"name\":\"fxhash\",\"req\":\"^0.2.1\"},{\"default_features\":false,\"features\":[\"default-hasher\",\"inline-more\"],\"name\":\"hashbrown\",\"req\":\"^0.15.0\"},{\"default_features\":false,\"name\":\"indexmap\",\"req\":\"^2.5.0\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"itertools\",\"req\":\"^0.12.1\"},{\"kind\":\"dev\",\"name\":\"odds\",\"req\":\"^0.4.0\"},{\"default_features\":false,\"name\":\"quickcheck\",\"optional\":true,\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.5.5\"},{\"name\":\"rayon\",\"optional\":true,\"req\":\"^1.5.3\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"serde_derive\",\"optional\":true,\"req\":\"^1.0\"}],\"features\":{\"all\":[\"unstable\",\"quickcheck\",\"matrix_graph\",\"stable_graph\",\"graphmap\",\"rayon\",\"dot_parser\"],\"default\":[\"std\",\"graphmap\",\"stable_graph\",\"matrix_graph\"],\"dot_parser\":[\"std\",\"dep:dot-parser\",\"dep:dot-parser-macros\"],\"generate\":[],\"graphmap\":[],\"matrix_graph\":[],\"quickcheck\":[\"std\",\"dep:quickcheck\",\"graphmap\",\"stable_graph\"],\"rayon\":[\"std\",\"dep:rayon\",\"indexmap/rayon\",\"hashbrown/rayon\"],\"serde-1\":[\"serde\",\"serde_derive\"],\"stable_graph\":[\"serde?/alloc\"],\"std\":[\"indexmap/std\"],\"unstable\":[\"generate\"]}}", "petname_2.0.2": "{\"dependencies\":[{\"kind\":\"build\",\"name\":\"anyhow\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1\"},{\"features\":[\"cargo\",\"derive\"],\"name\":\"clap\",\"optional\":true,\"req\":\"^4.4\"},{\"default_features\":false,\"name\":\"itertools\",\"req\":\">=0.11\"},{\"kind\":\"build\",\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"kind\":\"build\",\"name\":\"quote\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"rand\",\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"tempdir\",\"req\":\"^0.3\"}],\"features\":{\"default\":[\"clap\",\"default-rng\",\"default-words\"],\"default-rng\":[\"rand/std\",\"rand/std_rng\"],\"default-words\":[]}}", + "phc_0.6.1": "{\"dependencies\":[{\"name\":\"base64ct\",\"req\":\"^1.7\"},{\"name\":\"ctutils\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"}],\"features\":{\"alloc\":[\"base64ct/alloc\"],\"default\":[\"rand_core\"],\"getrandom\":[\"dep:getrandom\"],\"rand_core\":[\"dep:rand_core\"]}}", "pin-project-internal_1.1.11": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1.0.60\"},{\"name\":\"quote\",\"req\":\"^1.0.25\"},{\"default_features\":false,\"features\":[\"parsing\",\"printing\",\"clone-impls\",\"proc-macro\",\"full\",\"visit-mut\"],\"name\":\"syn\",\"req\":\"^2.0.1\"}],\"features\":{}}", "pin-project-lite_0.2.17": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"static_assertions\",\"req\":\"^1\"}],\"features\":{}}", "pin-project_1.1.11": "{\"dependencies\":[{\"name\":\"pin-project-internal\",\"req\":\"=1.1.11\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"static_assertions\",\"req\":\"^1\"}],\"features\":{}}", "pin-utils_0.1.0": "{\"dependencies\":[],\"features\":{}}", "pkcs1_0.7.5": "{\"dependencies\":[{\"features\":[\"db\"],\"kind\":\"dev\",\"name\":\"const-oid\",\"req\":\"^0.9\"},{\"features\":[\"oid\"],\"name\":\"der\",\"req\":\"^0.7\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"pkcs8\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"spki\",\"req\":\"^0.7\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"}],\"features\":{\"alloc\":[\"der/alloc\",\"zeroize\",\"pkcs8?/alloc\"],\"pem\":[\"alloc\",\"der/pem\",\"pkcs8?/pem\"],\"std\":[\"der/std\",\"alloc\"],\"zeroize\":[\"der/zeroize\"]}}", "pkcs1_0.8.0-rc.4": "{\"dependencies\":[{\"features\":[\"db\"],\"kind\":\"dev\",\"name\":\"const-oid\",\"req\":\"^0.10\"},{\"features\":[\"oid\"],\"name\":\"der\",\"req\":\"^0.8.0-rc.9\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"spki\",\"req\":\"^0.8.0-rc.4\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"}],\"features\":{\"alloc\":[\"der/alloc\",\"zeroize\"],\"pem\":[\"alloc\",\"der/pem\"],\"std\":[\"der/std\",\"alloc\"],\"zeroize\":[\"der/zeroize\"]}}", - "pkcs5_0.7.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"aes\",\"optional\":true,\"req\":\"^0.8.2\"},{\"name\":\"cbc\",\"optional\":true,\"req\":\"^0.1.2\"},{\"features\":[\"oid\"],\"name\":\"der\",\"req\":\"^0.7\"},{\"default_features\":false,\"name\":\"des\",\"optional\":true,\"req\":\"^0.8.1\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"pbkdf2\",\"optional\":true,\"req\":\"^0.12.1\"},{\"default_features\":false,\"name\":\"scrypt\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"sha1\",\"optional\":true,\"req\":\"^0.10.1\"},{\"default_features\":false,\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.10.2\"},{\"name\":\"spki\",\"req\":\"^0.7\"}],\"features\":{\"3des\":[\"dep:des\",\"pbes2\"],\"alloc\":[],\"des-insecure\":[\"dep:des\",\"pbes2\"],\"pbes2\":[\"dep:aes\",\"dep:cbc\",\"dep:pbkdf2\",\"dep:scrypt\",\"dep:sha2\"],\"sha1-insecure\":[\"dep:sha1\",\"pbes2\"]}}", + "pkcs5_0.8.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"aes\",\"optional\":true,\"req\":\"^0.9\"},{\"default_features\":false,\"features\":[\"aes\"],\"name\":\"aes-gcm\",\"optional\":true,\"req\":\"^0.11\"},{\"name\":\"cbc\",\"optional\":true,\"req\":\"^0.2\"},{\"features\":[\"oid\"],\"name\":\"der\",\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"des\",\"optional\":true,\"req\":\"^0.9\"},{\"features\":[\"sys_rng\"],\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"hmac\"],\"name\":\"pbkdf2\",\"optional\":true,\"req\":\"^0.13\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"scrypt\",\"optional\":true,\"req\":\"^0.12\"},{\"default_features\":false,\"name\":\"sha1\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.11\"},{\"name\":\"spki\",\"req\":\"^0.8\"}],\"features\":{\"3des\":[\"dep:des\",\"pbes2\"],\"alloc\":[],\"des-insecure\":[\"dep:des\",\"pbes2\"],\"getrandom\":[\"dep:getrandom\",\"rand_core\"],\"pbes2\":[\"dep:aes\",\"dep:cbc\",\"dep:pbkdf2\",\"dep:scrypt\",\"dep:sha2\",\"dep:aes-gcm\"],\"rand_core\":[\"dep:rand_core\"],\"sha1-insecure\":[\"dep:sha1\",\"pbes2\"]}}", "pkcs8_0.10.2": "{\"dependencies\":[{\"features\":[\"oid\"],\"name\":\"der\",\"req\":\"^0.7\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3\"},{\"name\":\"pkcs5\",\"optional\":true,\"req\":\"^0.7\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.6\"},{\"name\":\"spki\",\"req\":\"^0.7.1\"},{\"default_features\":false,\"name\":\"subtle\",\"optional\":true,\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"}],\"features\":{\"3des\":[\"encryption\",\"pkcs5/3des\"],\"alloc\":[\"der/alloc\",\"der/zeroize\",\"spki/alloc\"],\"des-insecure\":[\"encryption\",\"pkcs5/des-insecure\"],\"encryption\":[\"alloc\",\"pkcs5/alloc\",\"pkcs5/pbes2\",\"rand_core\"],\"getrandom\":[\"rand_core/getrandom\"],\"pem\":[\"alloc\",\"der/pem\",\"spki/pem\"],\"sha1-insecure\":[\"encryption\",\"pkcs5/sha1-insecure\"],\"std\":[\"alloc\",\"der/std\",\"spki/std\"]}}", - "pkcs8_0.11.0-rc.11": "{\"dependencies\":[{\"features\":[\"oid\"],\"name\":\"der\",\"req\":\"^0.8.0-rc.12\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"features\":[\"rand_core\"],\"name\":\"pkcs5\",\"optional\":true,\"req\":\"^0.8.0-rc.13\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"spki\",\"req\":\"^0.8.0-rc.4\"},{\"default_features\":false,\"name\":\"subtle\",\"optional\":true,\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"}],\"features\":{\"3des\":[\"encryption\",\"pkcs5/3des\"],\"alloc\":[\"der/alloc\",\"der/zeroize\",\"spki/alloc\"],\"des-insecure\":[\"encryption\",\"pkcs5/des-insecure\"],\"encryption\":[\"alloc\",\"pkcs5/alloc\",\"pkcs5/pbes2\",\"rand_core\"],\"pem\":[\"alloc\",\"der/pem\",\"spki/pem\"],\"sha1-insecure\":[\"encryption\",\"pkcs5/sha1-insecure\"],\"std\":[\"alloc\",\"der/std\",\"spki/std\"]}}", + "pkcs8_0.11.0": "{\"dependencies\":[{\"name\":\"ctutils\",\"optional\":true,\"req\":\"^0.4\"},{\"features\":[\"oid\"],\"name\":\"der\",\"req\":\"^0.8.0-rc.12\"},{\"features\":[\"sys_rng\"],\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"features\":[\"rand_core\"],\"name\":\"pkcs5\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"spki\",\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"}],\"features\":{\"3des\":[\"encryption\",\"pkcs5/3des\"],\"alloc\":[\"der/alloc\",\"der/zeroize\",\"spki/alloc\"],\"des-insecure\":[\"encryption\",\"pkcs5/des-insecure\"],\"encryption\":[\"alloc\",\"pkcs5/alloc\",\"pkcs5/pbes2\",\"dep:rand_core\"],\"getrandom\":[\"encryption\",\"pkcs5/getrandom\",\"dep:getrandom\"],\"pem\":[\"alloc\",\"der/pem\",\"spki/pem\"],\"sha1-insecure\":[\"encryption\",\"pkcs5/sha1-insecure\"],\"std\":[\"alloc\",\"der/std\",\"spki/std\"]}}", "pkg-config_0.3.33": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"lazy_static\",\"req\":\"^1\"}],\"features\":{}}", "plain_0.2.3": "{\"dependencies\":[],\"features\":{}}", "polling_3.11.0": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"name\":\"concurrent-queue\",\"req\":\"^2.2.0\",\"target\":\"cfg(windows)\"},{\"kind\":\"dev\",\"name\":\"easy-parallel\",\"req\":\"^3.1.0\"},{\"kind\":\"dev\",\"name\":\"fastrand\",\"req\":\"^2.0.0\"},{\"name\":\"hermit-abi\",\"req\":\"^0.5.0\",\"target\":\"cfg(target_os = \\\"hermit\\\")\"},{\"kind\":\"dev\",\"name\":\"libc\",\"req\":\"^0.2\",\"target\":\"cfg(unix)\"},{\"name\":\"pin-project-lite\",\"req\":\"^0.2.9\",\"target\":\"cfg(windows)\"},{\"default_features\":false,\"features\":[\"event\",\"fs\",\"pipe\",\"process\",\"std\",\"time\"],\"name\":\"rustix\",\"req\":\"^1.0.5\",\"target\":\"cfg(any(unix, target_os = \\\"fuchsia\\\", target_os = \\\"vxworks\\\"))\"},{\"kind\":\"dev\",\"name\":\"signal-hook\",\"req\":\"^0.3.17\",\"target\":\"cfg(all(unix, not(target_os=\\\"vita\\\")))\"},{\"kind\":\"dev\",\"name\":\"socket2\",\"req\":\"^0.6.0\"},{\"default_features\":false,\"name\":\"tracing\",\"optional\":true,\"req\":\"^0.1.37\"},{\"features\":[\"Wdk_Foundation\",\"Wdk_Storage_FileSystem\",\"Win32_Foundation\",\"Win32_Networking_WinSock\",\"Win32_Security\",\"Win32_Storage_FileSystem\",\"Win32_System_IO\",\"Win32_System_LibraryLoader\",\"Win32_System_Threading\",\"Win32_System_WindowsProgramming\"],\"name\":\"windows-sys\",\"req\":\"^0.61\",\"target\":\"cfg(windows)\"}],\"features\":{}}", - "poly1305_0.8.0": "{\"dependencies\":[{\"name\":\"cpufeatures\",\"req\":\"^0.2\",\"target\":\"cfg(any(target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3\"},{\"name\":\"opaque-debug\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"universal-hash\",\"req\":\"^0.5\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"std\":[\"universal-hash/std\"]}}", - "polyval_0.6.2": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"name\":\"cpufeatures\",\"req\":\"^0.2\",\"target\":\"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3\"},{\"name\":\"opaque-debug\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"universal-hash\",\"req\":\"^0.5\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"std\":[\"universal-hash/std\"]}}", + "poly1305_0.9.1": "{\"dependencies\":[{\"name\":\"cpufeatures\",\"req\":\"^0.3\",\"target\":\"cfg(any(target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"universal-hash\",\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{}}", + "polyval_0.7.3": "{\"dependencies\":[{\"name\":\"cpubits\",\"req\":\"^0.1\"},{\"name\":\"cpufeatures\",\"req\":\"^0.3\",\"target\":\"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86\\\", target_arch = \\\"x86_64\\\"))\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.9\",\"target\":\"cfg(any(unix, windows))\"},{\"name\":\"universal-hash\",\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"hazmat\":[]}}", "portable-atomic-util_0.2.6": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"build-context\",\"req\":\"^0.1\"},{\"default_features\":false,\"features\":[\"require-cas\"],\"name\":\"portable-atomic\",\"req\":\"^1.5.1\"}],\"features\":{\"alloc\":[],\"default\":[],\"std\":[\"alloc\"]}}", "portable-atomic-util_0.2.7": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"build-context\",\"req\":\"^0.1\"},{\"default_features\":false,\"features\":[\"require-cas\"],\"name\":\"portable-atomic\",\"req\":\"^1.5.1\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.60\"}],\"features\":{\"alloc\":[],\"default\":[],\"std\":[\"alloc\"]}}", "portable-atomic_1.13.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"build-context\",\"req\":\"^0.1\"},{\"kind\":\"dev\",\"name\":\"crabgrind\",\"req\":\"^0.1\",\"target\":\"cfg(valgrind)\"},{\"name\":\"critical-section\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"crossbeam-utils\",\"req\":\"=0.8.16\"},{\"kind\":\"dev\",\"name\":\"fastrand\",\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"libc\",\"req\":\"=0.2.163\",\"target\":\"cfg(unix)\"},{\"kind\":\"dev\",\"name\":\"paste\",\"req\":\"^1\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.60\"},{\"kind\":\"dev\",\"name\":\"sptr\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"static_assertions\",\"req\":\"^1\"},{\"features\":[\"Win32_Foundation\",\"Win32_System_Threading\"],\"kind\":\"dev\",\"name\":\"windows-sys\",\"req\":\"^0.61\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[\"fallback\"],\"disable-fiq\":[],\"fallback\":[],\"float\":[],\"force-amo\":[],\"require-cas\":[],\"s-mode\":[],\"std\":[],\"unsafe-assume-privileged\":[],\"unsafe-assume-single-core\":[]}}", @@ -1005,7 +1005,8 @@ "ppmd-rust_1.4.0": "{\"dependencies\":[],\"features\":{\"default\":[],\"unstable-tagged-offsets\":[]}}", "ppv-lite86_0.2.21": "{\"dependencies\":[{\"features\":[\"simd\"],\"name\":\"zerocopy\",\"req\":\"^0.8.23\"}],\"features\":{\"default\":[\"std\"],\"no_simd\":[],\"simd\":[],\"std\":[]}}", "prettyplease_0.2.37": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"indoc\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"proc-macro2\",\"req\":\"^1.0.80\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"proc-macro2\",\"req\":\"^1.0.80\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quote\",\"req\":\"^1.0.35\"},{\"default_features\":false,\"features\":[\"full\"],\"name\":\"syn\",\"req\":\"^2.0.105\"},{\"default_features\":false,\"features\":[\"clone-impls\",\"extra-traits\",\"parsing\",\"printing\",\"visit-mut\"],\"kind\":\"dev\",\"name\":\"syn\",\"req\":\"^2.0.105\"}],\"features\":{\"verbatim\":[\"syn/parsing\"]}}", - "primeorder_0.13.6": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"arithmetic\",\"sec1\"],\"name\":\"elliptic-curve\",\"req\":\"^0.13.7\"},{\"default_features\":false,\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.2\"}],\"features\":{\"alloc\":[\"elliptic-curve/alloc\"],\"dev\":[],\"serde\":[\"elliptic-curve/serde\",\"serdect\"],\"std\":[\"alloc\",\"elliptic-curve/std\"]}}", + "primefield_0.14.0": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"rand_core\",\"hybrid-array\",\"subtle\"],\"name\":\"bigint\",\"package\":\"crypto-bigint\",\"req\":\"^0.7.5\"},{\"features\":[\"rand_core\"],\"name\":\"common\",\"package\":\"crypto-common\",\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"ff\",\"req\":\"^0.14\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.10\"},{\"default_features\":false,\"features\":[\"const-generics\"],\"name\":\"subtle\",\"req\":\"^2.6\"},{\"default_features\":false,\"name\":\"zeroize\",\"req\":\"^1.7\"}],\"features\":{}}", + "primeorder_0.14.0-rc.10": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"arithmetic\",\"sec1\"],\"name\":\"elliptic-curve\",\"req\":\"^0.14.0-rc.33\"},{\"default_features\":false,\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.4\"}],\"features\":{\"alloc\":[\"elliptic-curve/alloc\"],\"basepoint-table\":[\"elliptic-curve/basepoint-table\"],\"dev\":[],\"hash2curve\":[],\"serde\":[\"elliptic-curve/serde\",\"serdect\"],\"std\":[\"alloc\",\"elliptic-curve/std\"]}}", "proc-macro-error-attr2_2.0.0": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"}],\"features\":{}}", "proc-macro-error2_2.0.1": "{\"dependencies\":[{\"name\":\"proc-macro-error-attr2\",\"req\":\"=2.0.0\"},{\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"syn\",\"optional\":true,\"req\":\"^2\"},{\"features\":[\"full\"],\"kind\":\"dev\",\"name\":\"syn\",\"req\":\"^2\"},{\"features\":[\"diff\"],\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.99\"}],\"features\":{\"default\":[\"syn-error\"],\"nightly\":[],\"syn-error\":[\"dep:syn\"]}}", "proc-macro2_1.0.106": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"flate2\",\"req\":\"^1.0\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quote\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"rayon\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"tar\",\"req\":\"^0.4\"},{\"name\":\"unicode-ident\",\"req\":\"^1.0\"}],\"features\":{\"default\":[\"proc-macro\"],\"nightly\":[],\"proc-macro\":[],\"span-locations\":[]}}", @@ -1033,11 +1034,12 @@ "quote_1.0.45": "{\"dependencies\":[{\"default_features\":false,\"name\":\"proc-macro2\",\"req\":\"^1.0.80\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1.0\"},{\"features\":[\"diff\"],\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.108\"}],\"features\":{\"default\":[\"proc-macro\"],\"proc-macro\":[\"proc-macro2/proc-macro\"]}}", "r-efi_5.3.0": "{\"dependencies\":[{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"}],\"features\":{\"efiapi\":[],\"examples\":[\"native\"],\"native\":[],\"rustc-dep-of-std\":[\"core\"]}}", "r-efi_6.0.0": "{\"dependencies\":[{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"}],\"features\":{\"native\":[],\"rustc-dep-of-std\":[\"core\"]}}", + "rand_0.10.2": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"rng\"],\"name\":\"chacha20\",\"optional\":true,\"req\":\"^0.10.0\"},{\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.4.0\"},{\"default_features\":false,\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"postcard\",\"req\":\"^1.1.3\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.10.0\"},{\"kind\":\"dev\",\"name\":\"rand_pcg\",\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"rayon\",\"req\":\"^1.7\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.103\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.140\"}],\"features\":{\"alloc\":[],\"chacha\":[\"dep:chacha20\"],\"default\":[\"std\",\"std_rng\",\"sys_rng\",\"thread_rng\"],\"log\":[],\"serde\":[\"dep:serde\"],\"simd_support\":[],\"std\":[\"alloc\",\"getrandom?/std\"],\"std_rng\":[\"dep:chacha20\"],\"sys_rng\":[\"dep:getrandom\",\"getrandom/sys_rng\"],\"thread_rng\":[\"std\",\"std_rng\",\"sys_rng\"],\"unbiased\":[]}}", "rand_0.8.6": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1.2.1\"},{\"default_features\":false,\"name\":\"libc\",\"optional\":true,\"req\":\"^0.2.22\",\"target\":\"cfg(unix)\"},{\"default_features\":false,\"name\":\"rand_chacha\",\"optional\":true,\"req\":\"^0.3.0\"},{\"name\":\"rand_core\",\"req\":\"^0.6.0\"},{\"kind\":\"dev\",\"name\":\"rand_pcg\",\"req\":\"^0.3.0\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.103\"}],\"features\":{\"alloc\":[\"rand_core/alloc\"],\"default\":[\"std\",\"std_rng\"],\"getrandom\":[\"rand_core/getrandom\"],\"log\":[],\"min_const_gen\":[],\"nightly\":[],\"serde1\":[\"serde\",\"rand_core/serde1\"],\"small_rng\":[],\"std\":[\"rand_core/std\",\"rand_chacha/std\",\"alloc\",\"getrandom\",\"libc\"],\"std_rng\":[\"rand_chacha\"]}}", "rand_0.9.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1.2.1\"},{\"default_features\":false,\"name\":\"rand_chacha\",\"optional\":true,\"req\":\"^0.9.0\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.9.0\"},{\"kind\":\"dev\",\"name\":\"rand_pcg\",\"req\":\"^0.9.0\"},{\"kind\":\"dev\",\"name\":\"rayon\",\"req\":\"^1.7\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.103\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.140\"}],\"features\":{\"alloc\":[],\"default\":[\"std\",\"std_rng\",\"os_rng\",\"small_rng\",\"thread_rng\"],\"log\":[],\"nightly\":[],\"os_rng\":[\"rand_core/os_rng\"],\"serde\":[\"dep:serde\",\"rand_core/serde\"],\"simd_support\":[],\"small_rng\":[],\"std\":[\"rand_core/std\",\"rand_chacha?/std\",\"alloc\"],\"std_rng\":[\"dep:rand_chacha\"],\"thread_rng\":[\"std\",\"std_rng\",\"os_rng\"],\"unbiased\":[]}}", "rand_chacha_0.3.1": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"simd\"],\"name\":\"ppv-lite86\",\"req\":\"^0.2.8\"},{\"name\":\"rand_core\",\"req\":\"^0.6.0\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"}],\"features\":{\"default\":[\"std\"],\"serde1\":[\"serde\"],\"simd\":[],\"std\":[\"ppv-lite86/std\"]}}", "rand_chacha_0.9.0": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"simd\"],\"name\":\"ppv-lite86\",\"req\":\"^0.2.14\"},{\"name\":\"rand_core\",\"req\":\"^0.9.0\"},{\"features\":[\"os_rng\"],\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.9.0\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"}],\"features\":{\"default\":[\"std\"],\"os_rng\":[\"rand_core/os_rng\"],\"serde\":[\"dep:serde\"],\"std\":[\"ppv-lite86/std\",\"rand_core/std\"]}}", - "rand_core_0.10.0-rc-3": "{\"dependencies\":[],\"features\":{}}", + "rand_core_0.10.1": "{\"dependencies\":[],\"features\":{}}", "rand_core_0.6.4": "{\"dependencies\":[{\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.2\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[],\"serde1\":[\"serde\"],\"std\":[\"alloc\",\"getrandom\",\"getrandom/std\"]}}", "rand_core_0.9.5": "{\"dependencies\":[{\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.3.0\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"os_rng\":[\"dep:getrandom\"],\"serde\":[\"dep:serde\"],\"std\":[\"getrandom?/std\"]}}", "rand_xoshiro_0.7.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1\"},{\"name\":\"rand_core\",\"req\":\"^0.9.0\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"serde\":[\"dep:serde\"]}}", @@ -1055,15 +1057,15 @@ "regorus_0.9.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"anyhow\",\"req\":\"^1.0.45\"},{\"kind\":\"build\",\"name\":\"anyhow\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0.45\"},{\"default_features\":false,\"features\":[\"alloc\",\"serde\"],\"name\":\"bincode\",\"optional\":true,\"req\":\"^2.0.1\"},{\"kind\":\"dev\",\"name\":\"cfg-if\",\"req\":\"^1.0.0\"},{\"name\":\"chrono\",\"optional\":true,\"req\":\"^0.4.40\"},{\"name\":\"chrono-tz\",\"optional\":true,\"req\":\"^0.10.1\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"clap\",\"req\":\"^4.5.53\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"dashmap\",\"optional\":true,\"req\":\"^6.1\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"data-encoding\",\"optional\":true,\"req\":\"^2.8.0\"},{\"default_features\":false,\"features\":[\"simd-accel\"],\"name\":\"globset\",\"optional\":true,\"req\":\"^0.4.16\"},{\"default_features\":false,\"features\":[\"serde\"],\"name\":\"indexmap\",\"optional\":true,\"req\":\"^2.12.1\"},{\"default_features\":false,\"name\":\"ipnet\",\"optional\":true,\"req\":\"^2.11.0\"},{\"default_features\":false,\"name\":\"jsonschema\",\"optional\":true,\"req\":\"^0.30.0\"},{\"default_features\":false,\"name\":\"lazy_static\",\"req\":\"^1.4.0\"},{\"name\":\"mimalloc\",\"optional\":true,\"package\":\"regorus-mimalloc\",\"req\":\"^2.2.6\"},{\"features\":[\"error\"],\"name\":\"msvc_spectre_libs\",\"optional\":true,\"req\":\"^0.1\"},{\"default_features\":false,\"name\":\"num-bigint\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"num-traits\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"num_cpus\",\"req\":\"^1.16\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"prettydiff\",\"req\":\"^0.9.0\"},{\"default_features\":false,\"features\":[\"thread_rng\"],\"name\":\"rand\",\"optional\":true,\"req\":\"^0.9.0\"},{\"default_features\":false,\"name\":\"regex\",\"optional\":true,\"req\":\"^1.11.1\"},{\"default_features\":false,\"name\":\"semver\",\"optional\":true,\"req\":\"^1.0.25\"},{\"default_features\":false,\"features\":[\"derive\",\"rc\",\"alloc\"],\"name\":\"serde\",\"req\":\"^1.0.150\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"serde_json\",\"req\":\"^1.0.89\"},{\"default_features\":false,\"name\":\"serde_yaml\",\"optional\":true,\"req\":\"^0.9.16\"},{\"kind\":\"dev\",\"name\":\"serde_yaml\",\"req\":\"^0.9.16\"},{\"default_features\":false,\"features\":[\"mutex\",\"spin_mutex\"],\"name\":\"spin\",\"req\":\"^0.9.8\"},{\"kind\":\"dev\",\"name\":\"test-generator\",\"req\":\"^0.3.1\"},{\"default_features\":false,\"name\":\"thiserror\",\"req\":\"^2.0\"},{\"name\":\"url\",\"optional\":true,\"req\":\"^2.5.4\"},{\"default_features\":false,\"features\":[\"v4\",\"fast-rng\"],\"name\":\"uuid\",\"optional\":true,\"req\":\"^1.15.1\"},{\"kind\":\"dev\",\"name\":\"walkdir\",\"req\":\"^2.3.2\"}],\"features\":{\"allocator-memory-limits\":[\"std\",\"mimalloc\",\"mimalloc/allocator-memory-limits\"],\"arc\":[],\"ast\":[],\"azure-rbac\":[],\"azure_policy\":[\"dep:jsonschema\",\"arc\",\"dashmap\"],\"base64\":[\"dep:data-encoding\"],\"base64url\":[\"dep:data-encoding\"],\"coverage\":[],\"default\":[\"full-opa\",\"arc\",\"rvm\"],\"full-opa\":[\"base64\",\"base64url\",\"coverage\",\"glob\",\"graph\",\"hex\",\"http\",\"jsonschema\",\"allocator-memory-limits\",\"mimalloc\",\"net\",\"opa-runtime\",\"regex\",\"semver\",\"std\",\"time\",\"uuid\",\"urlquery\",\"yaml\"],\"glob\":[\"dep:globset\"],\"graph\":[],\"hex\":[\"dep:data-encoding\"],\"http\":[],\"jsonschema\":[\"dep:jsonschema\"],\"mimalloc\":[\"dep:mimalloc\"],\"net\":[\"dep:ipnet\"],\"no_std\":[\"lazy_static/spin_no_std\"],\"opa-no-std\":[\"arc\",\"base64\",\"base64url\",\"coverage\",\"graph\",\"hex\",\"no_std\",\"opa-runtime\",\"regex\",\"semver\",\"lazy_static/spin_no_std\"],\"opa-runtime\":[],\"opa-testutil\":[],\"rand\":[\"dep:rand\"],\"regex\":[\"dep:regex\"],\"rego-extensions\":[],\"rvm\":[\"dep:bincode\",\"dep:indexmap\"],\"semver\":[\"dep:semver\"],\"std\":[\"rand/std\",\"rand/std_rng\",\"serde_json/std\",\"msvc_spectre_libs\"],\"time\":[\"dep:chrono\",\"dep:chrono-tz\"],\"urlquery\":[\"dep:url\"],\"uuid\":[\"dep:uuid\"],\"yaml\":[\"serde_yaml\"]}}", "reqwest_0.12.28": "{\"dependencies\":[{\"name\":\"base64\",\"req\":\"^0.22\"},{\"kind\":\"dev\",\"name\":\"brotli_crate\",\"package\":\"brotli\",\"req\":\"^8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"bytes\",\"req\":\"^1.2\"},{\"name\":\"cookie_crate\",\"optional\":true,\"package\":\"cookie\",\"req\":\"^0.18.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"cookie_store\",\"optional\":true,\"req\":\"^0.22.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"encoding_rs\",\"optional\":true,\"req\":\"^0.8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.10\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"flate2\",\"req\":\"^1.0.13\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"futures-channel\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3.28\"},{\"default_features\":false,\"name\":\"futures-util\",\"optional\":true,\"req\":\"^0.3.28\"},{\"default_features\":false,\"features\":[\"std\",\"alloc\"],\"kind\":\"dev\",\"name\":\"futures-util\",\"req\":\"^0.3.28\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"h2\",\"optional\":true,\"req\":\"^0.4\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"h3\",\"optional\":true,\"req\":\"^0.0.8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"h3-quinn\",\"optional\":true,\"req\":\"^0.0.10\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"tokio\"],\"name\":\"hickory-resolver\",\"optional\":true,\"req\":\"^0.25\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"http\",\"req\":\"^1.1\"},{\"name\":\"http-body\",\"req\":\"^1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"http-body-util\",\"req\":\"^0.1.2\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"http1\",\"client\"],\"name\":\"hyper\",\"req\":\"^1.1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"http1\",\"http2\",\"client\",\"server\"],\"kind\":\"dev\",\"name\":\"hyper\",\"req\":\"^1.1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"http1\",\"tls12\"],\"name\":\"hyper-rustls\",\"optional\":true,\"req\":\"^0.27.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"hyper-tls\",\"optional\":true,\"req\":\"^0.6\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"http1\",\"client\",\"client-legacy\",\"client-proxy\",\"tokio\"],\"name\":\"hyper-util\",\"req\":\"^0.1.12\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"http1\",\"http2\",\"client\",\"client-legacy\",\"server-auto\",\"server-graceful\",\"tokio\"],\"kind\":\"dev\",\"name\":\"hyper-util\",\"req\":\"^0.1.12\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"js-sys\",\"req\":\"^0.3.77\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"kind\":\"dev\",\"name\":\"libc\",\"req\":\"^0\"},{\"name\":\"log\",\"req\":\"^0.4.17\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"mime\",\"optional\":true,\"req\":\"^0.3.16\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"name\":\"mime_guess\",\"optional\":true,\"req\":\"^2.0\"},{\"name\":\"native-tls-crate\",\"optional\":true,\"package\":\"native-tls\",\"req\":\"^0.2.10\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"num_cpus\",\"req\":\"^1.0\"},{\"name\":\"once_cell\",\"optional\":true,\"req\":\"^1.18\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"percent-encoding\",\"req\":\"^2.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"pin-project-lite\",\"req\":\"^0.2.11\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"rustls\",\"runtime-tokio\"],\"name\":\"quinn\",\"optional\":true,\"req\":\"^0.11.1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"std\",\"tls12\"],\"name\":\"rustls\",\"optional\":true,\"req\":\"^0.23.4\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"rustls-native-certs\",\"optional\":true,\"req\":\"^0.8.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"std\"],\"name\":\"rustls-pki-types\",\"optional\":true,\"req\":\"^1.9.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"serde\",\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"serde_json\",\"req\":\"^1.0\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"serde_json\",\"optional\":true,\"req\":\"^1.0\"},{\"name\":\"serde_urlencoded\",\"req\":\"^0.7.1\"},{\"features\":[\"futures\"],\"name\":\"sync_wrapper\",\"req\":\"^1.0\"},{\"default_features\":false,\"features\":[\"net\",\"time\"],\"name\":\"tokio\",\"req\":\"^1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"macros\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"tokio-native-tls\",\"optional\":true,\"req\":\"^0.3.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"tls12\"],\"name\":\"tokio-rustls\",\"optional\":true,\"req\":\"^0.26\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"io\"],\"name\":\"tokio-util\",\"optional\":true,\"req\":\"^0.7.9\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"retry\",\"timeout\",\"util\"],\"name\":\"tower\",\"req\":\"^0.5.2\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"limit\"],\"kind\":\"dev\",\"name\":\"tower\",\"req\":\"^0.5.2\"},{\"default_features\":false,\"features\":[\"follow-redirect\"],\"name\":\"tower-http\",\"req\":\"^0.6.8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"tower-service\",\"req\":\"^0.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"url\",\"req\":\"^2.4\"},{\"name\":\"wasm-bindgen\",\"req\":\"^0.2.89\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"features\":[\"serde-serialize\"],\"kind\":\"dev\",\"name\":\"wasm-bindgen\",\"req\":\"^0.2.89\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"wasm-bindgen-futures\",\"req\":\"^0.4.18\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"wasm-streams\",\"optional\":true,\"req\":\"^0.4\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"features\":[\"AbortController\",\"AbortSignal\",\"Headers\",\"Request\",\"RequestInit\",\"RequestMode\",\"Response\",\"Window\",\"FormData\",\"Blob\",\"BlobPropertyBag\",\"ServiceWorkerGlobalScope\",\"RequestCredentials\",\"File\",\"ReadableStream\",\"RequestCache\"],\"name\":\"web-sys\",\"req\":\"^0.3.28\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"webpki-roots\",\"optional\":true,\"req\":\"^1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"zstd_crate\",\"package\":\"zstd\",\"req\":\"^0.13\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"}],\"features\":{\"__rustls\":[\"dep:hyper-rustls\",\"dep:tokio-rustls\",\"dep:rustls\",\"__tls\"],\"__rustls-ring\":[\"hyper-rustls?/ring\",\"tokio-rustls?/ring\",\"rustls?/ring\",\"quinn?/ring\"],\"__tls\":[\"dep:rustls-pki-types\",\"tokio/io-util\"],\"blocking\":[\"dep:futures-channel\",\"futures-channel?/sink\",\"dep:futures-util\",\"futures-util?/io\",\"futures-util?/sink\",\"tokio/sync\"],\"brotli\":[\"tower-http/decompression-br\"],\"charset\":[\"dep:encoding_rs\",\"dep:mime\"],\"cookies\":[\"dep:cookie_crate\",\"dep:cookie_store\"],\"default\":[\"default-tls\",\"charset\",\"http2\",\"system-proxy\"],\"default-tls\":[\"dep:hyper-tls\",\"dep:native-tls-crate\",\"__tls\",\"dep:tokio-native-tls\"],\"deflate\":[\"tower-http/decompression-deflate\"],\"gzip\":[\"tower-http/decompression-gzip\"],\"hickory-dns\":[\"dep:hickory-resolver\",\"dep:once_cell\"],\"http2\":[\"h2\",\"hyper/http2\",\"hyper-util/http2\",\"hyper-rustls?/http2\"],\"http3\":[\"rustls-tls-manual-roots\",\"dep:h3\",\"dep:h3-quinn\",\"dep:quinn\",\"tokio/macros\"],\"json\":[\"dep:serde_json\"],\"macos-system-configuration\":[\"system-proxy\"],\"multipart\":[\"dep:mime_guess\",\"dep:futures-util\"],\"native-tls\":[\"default-tls\"],\"native-tls-alpn\":[\"native-tls\",\"native-tls-crate?/alpn\",\"hyper-tls?/alpn\"],\"native-tls-vendored\":[\"native-tls\",\"native-tls-crate?/vendored\"],\"rustls-tls\":[\"rustls-tls-webpki-roots\"],\"rustls-tls-manual-roots\":[\"rustls-tls-manual-roots-no-provider\",\"__rustls-ring\"],\"rustls-tls-manual-roots-no-provider\":[\"__rustls\"],\"rustls-tls-native-roots\":[\"rustls-tls-native-roots-no-provider\",\"__rustls-ring\"],\"rustls-tls-native-roots-no-provider\":[\"dep:rustls-native-certs\",\"hyper-rustls?/native-tokio\",\"__rustls\"],\"rustls-tls-no-provider\":[\"rustls-tls-manual-roots-no-provider\"],\"rustls-tls-webpki-roots\":[\"rustls-tls-webpki-roots-no-provider\",\"__rustls-ring\"],\"rustls-tls-webpki-roots-no-provider\":[\"dep:webpki-roots\",\"hyper-rustls?/webpki-tokio\",\"__rustls\"],\"socks\":[],\"stream\":[\"tokio/fs\",\"dep:futures-util\",\"dep:tokio-util\",\"dep:wasm-streams\"],\"system-proxy\":[\"hyper-util/client-proxy-system\"],\"trust-dns\":[],\"zstd\":[\"tower-http/decompression-zstd\"]}}", "reqwest_0.13.2": "{\"dependencies\":[{\"name\":\"base64\",\"req\":\"^0.22\"},{\"kind\":\"dev\",\"name\":\"brotli_crate\",\"package\":\"brotli\",\"req\":\"^8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"bytes\",\"req\":\"^1.2\"},{\"name\":\"cookie_crate\",\"optional\":true,\"package\":\"cookie\",\"req\":\"^0.18.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"cookie_store\",\"optional\":true,\"req\":\"^0.22.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"encoding_rs\",\"optional\":true,\"req\":\"^0.8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.10\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"flate2\",\"req\":\"^1.0.13\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"futures-channel\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3.28\"},{\"default_features\":false,\"name\":\"futures-util\",\"optional\":true,\"req\":\"^0.3.28\"},{\"default_features\":false,\"features\":[\"std\",\"alloc\"],\"kind\":\"dev\",\"name\":\"futures-util\",\"req\":\"^0.3.28\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"h2\",\"optional\":true,\"req\":\"^0.4\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"h3\",\"optional\":true,\"req\":\"^0.0.8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"h3-quinn\",\"optional\":true,\"req\":\"^0.0.10\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"tokio\"],\"name\":\"hickory-resolver\",\"optional\":true,\"req\":\"^0.25\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"http\",\"req\":\"^1.1\"},{\"name\":\"http-body\",\"req\":\"^1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"http-body-util\",\"req\":\"^0.1.2\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"http1\",\"client\"],\"name\":\"hyper\",\"req\":\"^1.1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"http1\",\"http2\",\"client\",\"server\"],\"kind\":\"dev\",\"name\":\"hyper\",\"req\":\"^1.1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"http1\",\"tls12\"],\"name\":\"hyper-rustls\",\"optional\":true,\"req\":\"^0.27.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"hyper-tls\",\"optional\":true,\"req\":\"^0.6\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"http1\",\"client\",\"client-legacy\",\"client-proxy\",\"tokio\"],\"name\":\"hyper-util\",\"req\":\"^0.1.12\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"http1\",\"http2\",\"client\",\"client-legacy\",\"server-auto\",\"server-graceful\",\"tokio\"],\"kind\":\"dev\",\"name\":\"hyper-util\",\"req\":\"^0.1.12\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"js-sys\",\"req\":\"^0.3.77\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"kind\":\"dev\",\"name\":\"libc\",\"req\":\"^0\"},{\"name\":\"log\",\"req\":\"^0.4.17\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"mime\",\"optional\":true,\"req\":\"^0.3.16\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"name\":\"mime_guess\",\"optional\":true,\"req\":\"^2.0\"},{\"name\":\"native-tls-crate\",\"optional\":true,\"package\":\"native-tls\",\"req\":\"^0.2.10\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"num_cpus\",\"req\":\"^1.0\"},{\"name\":\"once_cell\",\"optional\":true,\"req\":\"^1.18\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"percent-encoding\",\"req\":\"^2.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"pin-project-lite\",\"req\":\"^0.2.11\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"runtime-tokio\"],\"name\":\"quinn\",\"optional\":true,\"req\":\"^0.11.1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"std\",\"tls12\"],\"name\":\"rustls\",\"optional\":true,\"req\":\"^0.23.4\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"std\"],\"name\":\"rustls-pki-types\",\"optional\":true,\"req\":\"^1.9.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"rustls-platform-verifier\",\"optional\":true,\"req\":\"^0.6\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"serde_json\",\"optional\":true,\"req\":\"^1.0\"},{\"name\":\"serde_urlencoded\",\"optional\":true,\"req\":\"^0.7.1\"},{\"features\":[\"futures\"],\"name\":\"sync_wrapper\",\"req\":\"^1.0\"},{\"default_features\":false,\"features\":[\"net\",\"time\"],\"name\":\"tokio\",\"req\":\"^1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"macros\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"tokio-native-tls\",\"optional\":true,\"req\":\"^0.3.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"tls12\"],\"name\":\"tokio-rustls\",\"optional\":true,\"req\":\"^0.26\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"io\"],\"name\":\"tokio-util\",\"optional\":true,\"req\":\"^0.7.9\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"retry\",\"timeout\",\"util\"],\"name\":\"tower\",\"req\":\"^0.5.2\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"limit\"],\"kind\":\"dev\",\"name\":\"tower\",\"req\":\"^0.5.2\"},{\"default_features\":false,\"features\":[\"follow-redirect\"],\"name\":\"tower-http\",\"req\":\"^0.6.8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"tower-service\",\"req\":\"^0.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"url\",\"req\":\"^2.4\"},{\"name\":\"wasm-bindgen\",\"req\":\"^0.2.89\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"features\":[\"serde-serialize\"],\"kind\":\"dev\",\"name\":\"wasm-bindgen\",\"req\":\"^0.2.89\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"wasm-bindgen-futures\",\"req\":\"^0.4.18\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"wasm-streams\",\"optional\":true,\"req\":\"^0.5\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"features\":[\"AbortController\",\"AbortSignal\",\"Headers\",\"Request\",\"RequestInit\",\"RequestMode\",\"Response\",\"Window\",\"FormData\",\"Blob\",\"BlobPropertyBag\",\"ServiceWorkerGlobalScope\",\"RequestCredentials\",\"File\",\"ReadableStream\",\"RequestCache\"],\"name\":\"web-sys\",\"req\":\"^0.3.28\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"kind\":\"dev\",\"name\":\"zstd_crate\",\"package\":\"zstd\",\"req\":\"^0.13\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"}],\"features\":{\"__native-tls\":[\"dep:hyper-tls\",\"dep:native-tls-crate\",\"__tls\",\"dep:tokio-native-tls\"],\"__native-tls-alpn\":[\"native-tls-crate?/alpn\",\"hyper-tls?/alpn\"],\"__rustls\":[\"dep:hyper-rustls\",\"dep:tokio-rustls\",\"dep:rustls\",\"__tls\"],\"__rustls-aws-lc-rs\":[\"hyper-rustls?/aws-lc-rs\",\"tokio-rustls?/aws-lc-rs\",\"rustls?/aws-lc-rs\",\"quinn?/rustls-aws-lc-rs\"],\"__tls\":[\"dep:rustls-pki-types\",\"tokio/io-util\"],\"blocking\":[\"dep:futures-channel\",\"futures-channel?/sink\",\"dep:futures-util\",\"futures-util?/io\",\"futures-util?/sink\",\"tokio/sync\"],\"brotli\":[\"tower-http/decompression-br\"],\"charset\":[\"dep:encoding_rs\",\"dep:mime\"],\"cookies\":[\"dep:cookie_crate\",\"dep:cookie_store\"],\"default\":[\"default-tls\",\"charset\",\"http2\",\"system-proxy\"],\"default-tls\":[\"rustls\"],\"deflate\":[\"tower-http/decompression-deflate\"],\"form\":[\"dep:serde\",\"dep:serde_urlencoded\"],\"gzip\":[\"tower-http/decompression-gzip\"],\"hickory-dns\":[\"dep:hickory-resolver\",\"dep:once_cell\"],\"http2\":[\"dep:h2\",\"hyper/http2\",\"hyper-util/http2\",\"hyper-rustls?/http2\"],\"http3\":[\"rustls\",\"dep:h3\",\"dep:h3-quinn\",\"dep:quinn\",\"tokio/macros\"],\"json\":[\"dep:serde\",\"dep:serde_json\"],\"multipart\":[\"dep:mime_guess\",\"dep:futures-util\"],\"native-tls\":[\"__native-tls\",\"__native-tls-alpn\"],\"native-tls-no-alpn\":[\"__native-tls\"],\"native-tls-vendored\":[\"__native-tls\",\"native-tls-crate?/vendored\",\"__native-tls-alpn\"],\"native-tls-vendored-no-alpn\":[\"__native-tls\",\"native-tls-crate?/vendored\"],\"query\":[\"dep:serde\",\"dep:serde_urlencoded\"],\"rustls\":[\"__rustls-aws-lc-rs\",\"dep:rustls-platform-verifier\",\"__rustls\"],\"rustls-no-provider\":[\"dep:rustls-platform-verifier\",\"__rustls\"],\"socks\":[],\"stream\":[\"tokio/fs\",\"dep:futures-util\",\"dep:tokio-util\",\"dep:wasm-streams\"],\"system-proxy\":[\"hyper-util/client-proxy-system\"],\"zstd\":[\"tower-http/decompression-zstd\"]}}", - "rfc6979_0.4.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3\"},{\"default_features\":false,\"features\":[\"reset\"],\"name\":\"hmac\",\"req\":\"^0.12\"},{\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2\"}],\"features\":{}}", + "rfc6979_0.5.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"hmac\",\"req\":\"^0.13\"},{\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2\"}],\"features\":{}}", "ring_0.17.14": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"build\",\"name\":\"cc\",\"req\":\"^1.2.8\"},{\"default_features\":false,\"name\":\"cfg-if\",\"req\":\"^1.0.0\"},{\"name\":\"getrandom\",\"req\":\"^0.2.10\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.148\",\"target\":\"cfg(all(any(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), all(target_arch = \\\"arm\\\", target_endian = \\\"little\\\")), any(target_os = \\\"android\\\", target_os = \\\"linux\\\")))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_vendor = \\\"apple\\\", any(target_os = \\\"ios\\\", target_os = \\\"macos\\\", target_os = \\\"tvos\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\")))\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"libc\",\"req\":\"^0.2.148\",\"target\":\"cfg(any(unix, windows, target_os = \\\"wasi\\\"))\"},{\"name\":\"untrusted\",\"req\":\"^0.9\"},{\"default_features\":false,\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3.37\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"features\":[\"Win32_Foundation\",\"Win32_System_Threading\"],\"name\":\"windows-sys\",\"req\":\"^0.52\",\"target\":\"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_os = \\\"windows\\\"))\"}],\"features\":{\"alloc\":[],\"default\":[\"alloc\",\"dev_urandom_fallback\"],\"dev_urandom_fallback\":[],\"less-safe-getrandom-custom-or-rdrand\":[],\"less-safe-getrandom-espidf\":[],\"slow_tests\":[],\"std\":[\"alloc\"],\"test_logging\":[],\"unstable-testing-arm-no-hw\":[],\"unstable-testing-arm-no-neon\":[],\"wasm32_unknown_unknown_js\":[\"getrandom/js\"]}}", "rouille_3.6.2": "{\"dependencies\":[{\"name\":\"base64\",\"req\":\"^0.13\"},{\"name\":\"brotli\",\"optional\":true,\"req\":\"^3.3.2\"},{\"default_features\":false,\"features\":[\"clock\"],\"name\":\"chrono\",\"req\":\"^0.4.19\"},{\"features\":[\"gzip\"],\"name\":\"deflate\",\"optional\":true,\"req\":\"^1.0.0\"},{\"name\":\"filetime\",\"req\":\"^0.2.0\"},{\"kind\":\"dev\",\"name\":\"log\",\"req\":\"^0.4\"},{\"default_features\":false,\"features\":[\"server\"],\"name\":\"multipart\",\"req\":\"^0.18\"},{\"name\":\"percent-encoding\",\"req\":\"^2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"postgres\",\"req\":\"^0.19\"},{\"name\":\"rand\",\"req\":\"^0.8\"},{\"name\":\"serde\",\"req\":\"^1\"},{\"name\":\"serde_derive\",\"req\":\"^1\"},{\"name\":\"serde_json\",\"req\":\"^1\"},{\"name\":\"sha1_smol\",\"req\":\"^1.0.0\"},{\"name\":\"threadpool\",\"req\":\"^1\"},{\"features\":[\"local-offset\"],\"name\":\"time\",\"req\":\"^0.3.15\"},{\"default_features\":false,\"name\":\"tiny_http\",\"req\":\"^0.12.0\"},{\"name\":\"url\",\"req\":\"^2\"}],\"features\":{\"default\":[\"gzip\",\"brotli\"],\"gzip\":[\"deflate\"],\"rustls\":[\"tiny_http/ssl-rustls\"],\"ssl\":[\"tiny_http/ssl\"]}}", "rowan_0.16.1": "{\"dependencies\":[{\"name\":\"countme\",\"req\":\"^3.0.0\"},{\"default_features\":false,\"features\":[\"inline-more\"],\"name\":\"hashbrown\",\"req\":\"^0.14.3\"},{\"kind\":\"dev\",\"name\":\"m_lexer\",\"req\":\"^0.0.4\"},{\"name\":\"rustc-hash\",\"req\":\"^1.0.1\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.89\"},{\"name\":\"text-size\",\"req\":\"^1.1.0\"}],\"features\":{\"serde1\":[\"serde\",\"text-size/serde\"]}}", - "rsa_0.10.0-rc.12": "{\"dependencies\":[{\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"base64ct\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"const-oid\",\"req\":\"^0.10\"},{\"default_features\":false,\"features\":[\"zeroize\",\"alloc\"],\"name\":\"crypto-bigint\",\"req\":\"^0.7.0-rc.16\"},{\"features\":[\"getrandom\"],\"name\":\"crypto-common\",\"optional\":true,\"req\":\"^0.2.0-rc.8\"},{\"default_features\":false,\"name\":\"crypto-primes\",\"req\":\"^0.7.0-pre.6\"},{\"default_features\":false,\"features\":[\"alloc\",\"oid\"],\"name\":\"digest\",\"req\":\"^0.11.0-rc.4\"},{\"features\":[\"serde\"],\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"alloc\",\"pem\"],\"name\":\"pkcs1\",\"optional\":true,\"req\":\"^0.8.0-rc.3\"},{\"default_features\":false,\"features\":[\"alloc\",\"pem\"],\"name\":\"pkcs8\",\"optional\":true,\"req\":\"^0.11.0-rc.8\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"features\":[\"chacha\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.10.0-rc.5\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.10.0-rc-2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.10.0-rc-3\"},{\"kind\":\"dev\",\"name\":\"rstest\",\"req\":\"^0.26.1\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.184\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.184\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.138\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0.89\"},{\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"sha1\",\"optional\":true,\"req\":\"^0.11.0-rc.3\"},{\"default_features\":false,\"features\":[\"oid\"],\"kind\":\"dev\",\"name\":\"sha1\",\"req\":\"^0.11.0-rc.3\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.11.0-rc.3\"},{\"default_features\":false,\"features\":[\"oid\"],\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.11.0-rc.3\"},{\"default_features\":false,\"features\":[\"oid\"],\"kind\":\"dev\",\"name\":\"sha3\",\"req\":\"^0.11.0-rc.3\"},{\"default_features\":false,\"features\":[\"alloc\",\"digest\",\"rand_core\"],\"name\":\"signature\",\"req\":\"^3.0.0-rc.5\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"spki\",\"optional\":true,\"req\":\"^0.8.0-rc.4\"},{\"features\":[\"alloc\"],\"name\":\"zeroize\",\"req\":\"^1.8\"}],\"features\":{\"default\":[\"std\",\"encoding\"],\"encoding\":[\"dep:pkcs1\",\"dep:pkcs8\",\"dep:spki\"],\"getrandom\":[\"crypto-bigint/getrandom\",\"crypto-common\"],\"hazmat\":[],\"pkcs5\":[\"pkcs8/encryption\"],\"serde\":[\"encoding\",\"dep:serde\",\"dep:serdect\",\"crypto-bigint/serde\"],\"std\":[\"pkcs1?/std\",\"pkcs8?/std\"]}}", + "rsa_0.10.0-rc.18": "{\"dependencies\":[{\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"base64ct\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"const-oid\",\"req\":\"^0.10\"},{\"default_features\":false,\"features\":[\"zeroize\",\"alloc\"],\"name\":\"crypto-bigint\",\"req\":\"^0.7\"},{\"features\":[\"getrandom\"],\"name\":\"crypto-common\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"crypto-primes\",\"req\":\"^0.7\"},{\"default_features\":false,\"features\":[\"alloc\",\"oid\"],\"name\":\"digest\",\"req\":\"^0.11\"},{\"features\":[\"serde\"],\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"alloc\",\"pem\"],\"name\":\"pkcs1\",\"optional\":true,\"req\":\"^0.8.0-rc.4\"},{\"default_features\":false,\"features\":[\"alloc\",\"pem\"],\"name\":\"pkcs8\",\"optional\":true,\"req\":\"^0.11\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"features\":[\"chacha\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.10\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"rstest\",\"req\":\"^0.26.1\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.184\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.184\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.138\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0.89\"},{\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"sha1\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"features\":[\"oid\"],\"kind\":\"dev\",\"name\":\"sha1\",\"req\":\"^0.11\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"features\":[\"oid\"],\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.11\"},{\"default_features\":false,\"features\":[\"oid\"],\"kind\":\"dev\",\"name\":\"sha3\",\"req\":\"^0.11\"},{\"default_features\":false,\"features\":[\"alloc\",\"digest\",\"rand_core\"],\"name\":\"signature\",\"req\":\"^3.0.0-rc.10\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"spki\",\"optional\":true,\"req\":\"^0.8\"},{\"features\":[\"alloc\"],\"name\":\"zeroize\",\"req\":\"^1.8\"}],\"features\":{\"default\":[\"std\",\"encoding\"],\"encoding\":[\"dep:pkcs1\",\"dep:pkcs8\",\"dep:spki\"],\"getrandom\":[\"crypto-bigint/getrandom\",\"crypto-common\"],\"hazmat\":[],\"pkcs5\":[\"pkcs8/encryption\"],\"serde\":[\"encoding\",\"dep:serde\",\"dep:serdect\",\"crypto-bigint/serde\"],\"std\":[\"pkcs1?/std\",\"pkcs8?/std\"]}}", "rsa_0.9.10": "{\"dependencies\":[{\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"base64ct\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"const-oid\",\"req\":\"^0.9\"},{\"default_features\":false,\"features\":[\"alloc\",\"oid\"],\"name\":\"digest\",\"req\":\"^0.10.5\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4.1\"},{\"default_features\":false,\"features\":[\"i128\",\"prime\",\"zeroize\"],\"name\":\"num-bigint\",\"package\":\"num-bigint-dig\",\"req\":\"^0.8.6\"},{\"default_features\":false,\"name\":\"num-integer\",\"req\":\"^0.1.39\"},{\"default_features\":false,\"features\":[\"libm\"],\"name\":\"num-traits\",\"req\":\"^0.2.9\"},{\"default_features\":false,\"features\":[\"alloc\",\"pkcs8\"],\"name\":\"pkcs1\",\"req\":\"^0.7.5\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"pkcs8\",\"req\":\"^0.10.2\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"rand_chacha\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"rand_core\",\"req\":\"^0.6.4\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.6\"},{\"kind\":\"dev\",\"name\":\"rand_xorshift\",\"req\":\"^0.3\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.184\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0.89\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"sha1\",\"optional\":true,\"req\":\"^0.10.5\"},{\"default_features\":false,\"features\":[\"oid\"],\"kind\":\"dev\",\"name\":\"sha1\",\"req\":\"^0.10.5\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.10.6\"},{\"default_features\":false,\"features\":[\"oid\"],\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.10.6\"},{\"default_features\":false,\"features\":[\"oid\"],\"kind\":\"dev\",\"name\":\"sha3\",\"req\":\"^0.10.7\"},{\"default_features\":false,\"features\":[\"alloc\",\"digest\",\"rand_core\"],\"name\":\"signature\",\"req\":\">2.0, <2.3\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"spki\",\"req\":\"^0.7.3\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2.1.1\"},{\"features\":[\"alloc\"],\"name\":\"zeroize\",\"req\":\"^1.5\"}],\"features\":{\"default\":[\"std\",\"pem\",\"u64_digit\"],\"getrandom\":[\"rand_core/getrandom\"],\"hazmat\":[],\"nightly\":[\"num-bigint/nightly\"],\"pem\":[\"pkcs1/pem\",\"pkcs8/pem\"],\"pkcs5\":[\"pkcs8/encryption\"],\"serde\":[\"dep:serde\",\"num-bigint/serde\"],\"std\":[\"digest/std\",\"pkcs1/std\",\"pkcs8/std\",\"rand_core/std\",\"signature/std\"],\"u64_digit\":[\"num-bigint/u64_digit\"]}}", - "russh-cryptovec_0.52.0": "{\"dependencies\":[{\"name\":\"libc\",\"req\":\"^0.2\",\"target\":\"cfg(target_os = \\\"windows\\\")\"},{\"name\":\"log\",\"req\":\"^0.4.11\"},{\"features\":[\"mman\"],\"name\":\"nix\",\"req\":\"^0.29\",\"target\":\"cfg(unix)\"},{\"features\":[\"bytes\"],\"name\":\"ssh-encoding\",\"optional\":true,\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3.46\"},{\"features\":[\"basetsd\",\"minwindef\",\"memoryapi\",\"errhandlingapi\",\"sysinfoapi\",\"impl-default\"],\"name\":\"winapi\",\"req\":\"^0.3\",\"target\":\"cfg(target_os = \\\"windows\\\")\"}],\"features\":{\"ssh-encoding\":[\"dep:ssh-encoding\"]}}", + "russh-cryptovec_0.61.0": "{\"dependencies\":[{\"name\":\"log\",\"req\":\"^0.4.11\"},{\"features\":[\"mman\"],\"name\":\"nix\",\"req\":\"^0.31\",\"target\":\"cfg(unix)\"},{\"features\":[\"bytes\"],\"name\":\"ssh-encoding\",\"optional\":true,\"req\":\"=0.3.0-rc.9\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3.46\"},{\"features\":[\"Win32_System_Memory\",\"Win32_System_SystemInformation\",\"Win32_System_Threading\",\"Win32_Foundation\"],\"name\":\"windows-sys\",\"req\":\"^0.61\",\"target\":\"cfg(target_os = \\\"windows\\\")\"}],\"features\":{\"ssh-encoding\":[\"dep:ssh-encoding\"]}}", "russh-util_0.52.0": "{\"dependencies\":[{\"name\":\"chrono\",\"req\":\"^0.4.38\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"features\":[\"sync\",\"macros\"],\"name\":\"tokio\",\"req\":\"^1.17.0\"},{\"features\":[\"io-util\",\"rt-multi-thread\",\"rt\"],\"name\":\"tokio\",\"req\":\"^1.17.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"wasm-bindgen\",\"req\":\"^0.2\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"wasm-bindgen-futures\",\"req\":\"^0.4.43\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"}],\"features\":{}}", - "russh_0.57.1": "{\"dependencies\":[{\"name\":\"aes\",\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0.4\"},{\"name\":\"async-trait\",\"optional\":true,\"req\":\"^0.1.50\"},{\"name\":\"aws-lc-rs\",\"optional\":true,\"req\":\"^1.13.1\"},{\"name\":\"bitflags\",\"req\":\"^2.0\"},{\"features\":[\"std\"],\"name\":\"block-padding\",\"req\":\"^0.3\"},{\"name\":\"byteorder\",\"req\":\"^1.4\"},{\"name\":\"bytes\",\"req\":\"^1.7\"},{\"name\":\"cbc\",\"req\":\"^0.1\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"clap\",\"req\":\"^3.2.3\"},{\"features\":[\"html_reports\"],\"name\":\"criterion\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"ctr\",\"req\":\"^0.9\"},{\"name\":\"curve25519-dalek\",\"req\":\"^4.1.3\"},{\"name\":\"data-encoding\",\"req\":\"^2.3\"},{\"name\":\"delegate\",\"req\":\"^0.13\"},{\"name\":\"der\",\"req\":\"^0.7\"},{\"name\":\"des\",\"optional\":true,\"req\":\"^0.8.1\"},{\"name\":\"digest\",\"req\":\"^0.10\"},{\"name\":\"ecdsa\",\"req\":\"^0.16\"},{\"features\":[\"rand_core\",\"pkcs8\"],\"name\":\"ed25519-dalek\",\"req\":\"^2.0\"},{\"features\":[\"ecdh\"],\"name\":\"elliptic-curve\",\"req\":\"^0.13\"},{\"name\":\"enum_dispatch\",\"req\":\"^0.3.13\"},{\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.6\"},{\"name\":\"flate2\",\"optional\":true,\"req\":\"^1.0.15\"},{\"name\":\"futures\",\"req\":\"^0.3\"},{\"features\":[\"compat-0_14\"],\"name\":\"generic-array\",\"req\":\"^1.3.3\"},{\"features\":[\"js\"],\"name\":\"getrandom\",\"req\":\"^0.2.15\"},{\"name\":\"hex-literal\",\"req\":\"^0.4\"},{\"name\":\"hmac\",\"req\":\"^0.12\"},{\"name\":\"home\",\"req\":\"^0.5\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"std\"],\"name\":\"inout\",\"req\":\"^0.1\"},{\"name\":\"libcrux-ml-kem\",\"req\":\"^0.0.4\"},{\"name\":\"log\",\"req\":\"^0.4.11\"},{\"name\":\"md5\",\"req\":\"^0.7\"},{\"features\":[\"rand\"],\"name\":\"num-bigint\",\"req\":\"^0.4.2\"},{\"features\":[\"ecdh\"],\"name\":\"p256\",\"req\":\"^0.13\"},{\"features\":[\"ecdh\"],\"name\":\"p384\",\"req\":\"^0.13\"},{\"features\":[\"ecdh\"],\"name\":\"p521\",\"req\":\"^0.13\"},{\"name\":\"pageant\",\"req\":\"^0.2\",\"target\":\"cfg(windows)\"},{\"name\":\"pbkdf2\",\"req\":\"^0.12\"},{\"name\":\"pkcs1\",\"optional\":true,\"req\":\"^0.8.0-rc.4\"},{\"name\":\"pkcs5\",\"req\":\"^0.7\"},{\"features\":[\"pkcs5\",\"encryption\",\"std\"],\"name\":\"pkcs8\",\"req\":\"^0.10\"},{\"features\":[\"thread_rng\"],\"name\":\"rand\",\"req\":\"^0.9\"},{\"features\":[\"thread_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"name\":\"rand_core\",\"req\":\"=0.10.0-rc-3\"},{\"kind\":\"dev\",\"name\":\"ratatui\",\"req\":\"^0.29.0\"},{\"name\":\"ring\",\"optional\":true,\"req\":\"^0.17.14\"},{\"name\":\"rsa\",\"optional\":true,\"req\":\"^0.10.0-rc.10\"},{\"features\":[\"ssh-encoding\"],\"name\":\"russh-cryptovec\",\"req\":\"^0.52.0\"},{\"kind\":\"dev\",\"name\":\"russh-sftp\",\"req\":\"^2.1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"russh-util\",\"req\":\"^0.52.0\"},{\"features\":[\"pkcs8\",\"der\"],\"name\":\"sec1\",\"req\":\"^0.7\"},{\"features\":[\"oid\"],\"name\":\"sha1\",\"req\":\"^0.10.5\"},{\"features\":[\"oid\"],\"name\":\"sha2\",\"req\":\"^0.10.6\"},{\"kind\":\"dev\",\"name\":\"shell-escape\",\"req\":\"^0.1\"},{\"name\":\"signature\",\"req\":\"^2.2\"},{\"name\":\"spki\",\"req\":\"^0.7\"},{\"features\":[\"bytes\"],\"name\":\"ssh-encoding\",\"req\":\"^0.2\"},{\"features\":[\"ed25519\",\"p256\",\"p384\",\"p521\",\"encryption\",\"ppk\",\"hazmat-allow-insecure-rsa-keys\"],\"name\":\"ssh-key\",\"package\":\"internal-russh-forked-ssh-key\",\"req\":\"=0.6.16\"},{\"name\":\"subtle\",\"req\":\"^2.4\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.14.0\"},{\"kind\":\"dev\",\"name\":\"termion\",\"req\":\"^2\"},{\"name\":\"thiserror\",\"req\":\"^1.0.30\"},{\"features\":[\"io-util\",\"sync\",\"time\"],\"name\":\"tokio\",\"req\":\"^1.17.0\"},{\"features\":[\"io-util\",\"rt-multi-thread\",\"time\",\"net\"],\"name\":\"tokio\",\"req\":\"^1.17.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"io-std\",\"io-util\",\"rt-multi-thread\",\"time\",\"net\",\"sync\",\"macros\",\"process\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.17.0\"},{\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.17.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"tokio-fd\",\"req\":\"^0.3\"},{\"features\":[\"net\",\"sync\"],\"kind\":\"dev\",\"name\":\"tokio-stream\",\"req\":\"^0.1.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"typenum\",\"req\":\"^1.17\"},{\"features\":[\"bit-vec\",\"num-bigint\"],\"name\":\"yasna\",\"optional\":true,\"req\":\"^0.5.0\"},{\"name\":\"zeroize\",\"req\":\"^1.7\"}],\"features\":{\"_bench\":[\"dep:criterion\"],\"async-trait\":[\"dep:async-trait\"],\"aws-lc-rs\":[\"dep:aws-lc-rs\"],\"default\":[\"flate2\",\"aws-lc-rs\",\"rsa\"],\"des\":[\"dep:des\"],\"dsa\":[\"ssh-key/dsa\"],\"legacy-ed25519-pkcs8-parser\":[\"yasna\"],\"ring\":[\"dep:ring\"],\"rsa\":[\"dep:rsa\",\"dep:pkcs1\",\"ssh-key/rsa\",\"ssh-key/rsa-sha1\"]}}", + "russh_0.61.2": "{\"dependencies\":[{\"name\":\"aes\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0.4\"},{\"name\":\"async-trait\",\"optional\":true,\"req\":\"^0.1.50\"},{\"name\":\"aws-lc-rs\",\"optional\":true,\"req\":\"^1.16.2\"},{\"name\":\"bitflags\",\"req\":\"^2.0\"},{\"name\":\"block-padding\",\"req\":\"^0.4\"},{\"name\":\"byteorder\",\"req\":\"^1.4\"},{\"name\":\"bytes\",\"req\":\"^1.7\"},{\"name\":\"cbc\",\"req\":\"^0.2\"},{\"name\":\"cipher\",\"req\":\"^0.5.1\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"clap\",\"req\":\"^4\"},{\"features\":[\"html_reports\"],\"name\":\"criterion\",\"optional\":true,\"req\":\"^0.7\"},{\"features\":[\"alloc\"],\"name\":\"crypto-bigint\",\"req\":\"^0.7.3\"},{\"name\":\"ctr\",\"req\":\"^0.10\"},{\"name\":\"curve25519-dalek\",\"req\":\"=5.0.0-rc.0\"},{\"name\":\"data-encoding\",\"req\":\"^2.3\"},{\"name\":\"delegate\",\"req\":\"^0.13\"},{\"name\":\"der\",\"req\":\"^0.8\"},{\"name\":\"des\",\"optional\":true,\"req\":\"^0.9\"},{\"name\":\"digest\",\"req\":\"^0.11.0-rc.5\"},{\"name\":\"ecdsa\",\"req\":\"=0.17.0-rc.18\"},{\"features\":[\"alloc\",\"rand_core\",\"pkcs8\"],\"name\":\"ed25519-dalek\",\"req\":\"=3.0.0-rc.0\"},{\"features\":[\"ecdh\"],\"name\":\"elliptic-curve\",\"req\":\"=0.14.0-rc.33\"},{\"name\":\"enum_dispatch\",\"req\":\"^0.3.13\"},{\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.11\"},{\"name\":\"flate2\",\"optional\":true,\"req\":\"^1.0.15\"},{\"name\":\"futures\",\"req\":\"^0.3\"},{\"features\":[\"compat-0_14\"],\"name\":\"generic-array\",\"req\":\"^1.3.3\"},{\"features\":[\"wasm_js\"],\"name\":\"getrandom\",\"req\":\"^0.4\"},{\"name\":\"ghash\",\"req\":\"^0.6.0\"},{\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"hmac\",\"req\":\"^0.13\"},{\"name\":\"inout\",\"req\":\"^0.2\"},{\"name\":\"keccak\",\"req\":\"^0.2.0\"},{\"name\":\"log\",\"req\":\"^0.4.11\"},{\"name\":\"md5\",\"req\":\"^0.8\"},{\"name\":\"ml-kem\",\"req\":\"^0.3\"},{\"name\":\"module-lattice\",\"req\":\"^0.2\"},{\"features\":[\"rand_0_10\"],\"name\":\"num-bigint\",\"package\":\"internal-russh-num-bigint\",\"req\":\"=0.5.0\"},{\"name\":\"num_bigint_0_4\",\"package\":\"num-bigint\",\"req\":\"^0.4.6\"},{\"features\":[\"ecdh\"],\"name\":\"p256\",\"req\":\"=0.14.0-rc.10\"},{\"features\":[\"ecdh\"],\"name\":\"p384\",\"req\":\"=0.14.0-rc.10\"},{\"features\":[\"ecdh\"],\"name\":\"p521\",\"req\":\"=0.14.0-rc.10\"},{\"name\":\"pageant\",\"req\":\"^0.2\",\"target\":\"cfg(windows)\"},{\"name\":\"pbkdf2\",\"req\":\"^0.13\"},{\"name\":\"pkcs1\",\"optional\":true,\"req\":\"=0.8.0-rc.4\"},{\"name\":\"pkcs5\",\"req\":\"^0.8\"},{\"features\":[\"encryption\",\"std\"],\"name\":\"pkcs8\",\"req\":\"^0.11\"},{\"name\":\"polyval\",\"req\":\"^0.7.1\"},{\"features\":[\"thread_rng\"],\"name\":\"rand\",\"req\":\"^0.10\"},{\"features\":[\"thread_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.10\"},{\"name\":\"rand_core\",\"req\":\"^0.10.0\"},{\"kind\":\"dev\",\"name\":\"ratatui\",\"req\":\"^0.30\"},{\"name\":\"ring\",\"optional\":true,\"req\":\"^0.17.14\"},{\"name\":\"rsa\",\"optional\":true,\"req\":\"=0.10.0-rc.18\"},{\"features\":[\"ssh-encoding\"],\"name\":\"russh-cryptovec\",\"req\":\"^0.61.0\"},{\"kind\":\"dev\",\"name\":\"russh-sftp\",\"req\":\"^2.1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"russh-util\",\"req\":\"^0.52.0\"},{\"name\":\"salsa20\",\"req\":\"^0.11.0\"},{\"name\":\"scrypt\",\"req\":\"^0.12.0\"},{\"features\":[\"der\"],\"name\":\"sec1\",\"req\":\"^0.8\"},{\"features\":[\"oid\"],\"name\":\"sha1\",\"req\":\"^0.11\"},{\"features\":[\"oid\"],\"name\":\"sha2\",\"req\":\"^0.11\"},{\"name\":\"sha3\",\"req\":\"^0.11.0\"},{\"kind\":\"dev\",\"name\":\"shell-escape\",\"req\":\"^0.1\"},{\"name\":\"signature\",\"req\":\"^3.0.0-rc.10\"},{\"name\":\"spki\",\"req\":\"^0.8\"},{\"features\":[\"bytes\"],\"name\":\"ssh-encoding\",\"req\":\"=0.3.0-rc.9\"},{\"features\":[\"ed25519\",\"p256\",\"p384\",\"p521\",\"encryption\",\"ppk\",\"sha1\"],\"name\":\"ssh-key\",\"req\":\"=0.7.0-rc.10\"},{\"name\":\"subtle\",\"req\":\"^2.4\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.14.0\"},{\"kind\":\"dev\",\"name\":\"termion\",\"req\":\"^4\",\"target\":\"cfg(not(target_os = \\\"windows\\\"))\"},{\"name\":\"thiserror\",\"req\":\"^2.0.18\"},{\"features\":[\"io-util\",\"sync\",\"time\"],\"name\":\"tokio\",\"req\":\"^1.17.0\"},{\"features\":[\"io-util\",\"rt-multi-thread\",\"time\",\"net\"],\"name\":\"tokio\",\"req\":\"^1.17.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"io-std\",\"io-util\",\"rt-multi-thread\",\"time\",\"net\",\"sync\",\"macros\",\"process\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.17.0\"},{\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.17.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"tokio-fd\",\"req\":\"^0.3\",\"target\":\"cfg(not(target_os = \\\"windows\\\"))\"},{\"features\":[\"net\",\"sync\"],\"kind\":\"dev\",\"name\":\"tokio-stream\",\"req\":\"^0.1.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"typenum\",\"req\":\"^1.17\"},{\"name\":\"universal-hash\",\"req\":\"^0.6.1\"},{\"features\":[\"bit-vec\",\"num-bigint\"],\"name\":\"yasna\",\"optional\":true,\"req\":\"^0.6\"},{\"name\":\"zeroize\",\"req\":\"^1.7\"}],\"features\":{\"_bench\":[\"dep:criterion\"],\"async-trait\":[\"dep:async-trait\"],\"aws-lc-rs\":[\"dep:aws-lc-rs\"],\"default\":[\"flate2\",\"aws-lc-rs\",\"rsa\"],\"des\":[\"dep:des\"],\"dsa\":[\"ssh-key/dsa\"],\"legacy-ed25519-pkcs8-parser\":[\"yasna\"],\"ring\":[\"dep:ring\"],\"rsa\":[\"dep:rsa\",\"dep:pkcs1\",\"ssh-key/rsa\"],\"serde\":[\"ssh-key/serde\"]}}", "rustc-demangle_0.1.27": "{\"dependencies\":[{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"}],\"features\":{\"compiler_builtins\":[],\"rustc-dep-of-std\":[\"core\"],\"std\":[]}}", "rustc-hash_1.1.0": "{\"dependencies\":[],\"features\":{\"default\":[\"std\"],\"std\":[]}}", "rustc-hash_2.1.2": "{\"dependencies\":[{\"name\":\"rand\",\"optional\":true,\"req\":\"^0.8\"}],\"features\":{\"default\":[\"std\"],\"nightly\":[],\"rand\":[\"dep:rand\",\"std\"],\"std\":[]}}", @@ -1085,7 +1087,7 @@ "rustversion_1.0.22": "{\"dependencies\":[{\"features\":[\"diff\"],\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.49\"}],\"features\":{}}", "ryu_1.0.23": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.8\",\"target\":\"cfg(not(miri))\"},{\"name\":\"no-panic\",\"optional\":true,\"req\":\"^0.1\"},{\"kind\":\"dev\",\"name\":\"num_cpus\",\"req\":\"^1.8\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"rand_core\",\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"rand_xorshift\",\"req\":\"^0.5\"}],\"features\":{\"small\":[]}}", "safemem_0.3.3": "{\"dependencies\":[],\"features\":{\"default\":[\"std\"],\"std\":[]}}", - "salsa20_0.10.2": "{\"dependencies\":[{\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3.3\"}],\"features\":{\"std\":[\"cipher/std\"],\"zeroize\":[\"cipher/zeroize\"]}}", + "salsa20_0.11.0": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"features\":[\"stream-wrapper\"],\"name\":\"cipher\",\"req\":\"^0.5\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.5\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"}],\"features\":{\"zeroize\":[\"cipher/zeroize\"]}}", "same-file_1.0.6": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\"},{\"name\":\"winapi-util\",\"req\":\"^0.1.1\",\"target\":\"cfg(windows)\"}],\"features\":{}}", "schannel_0.1.29": "{\"dependencies\":[{\"features\":[\"Win32_Foundation\",\"Win32_Security_Cryptography\",\"Win32_Security_Authentication_Identity\",\"Win32_Security_Credentials\",\"Win32_System_LibraryLoader\",\"Win32_System_Memory\",\"Win32_System_SystemInformation\"],\"name\":\"windows-sys\",\"req\":\"^0.61\"},{\"features\":[\"Win32_System_SystemInformation\",\"Win32_System_Time\"],\"kind\":\"dev\",\"name\":\"windows-sys\",\"req\":\"^0.61\"}],\"features\":{}}", "schemars_0.8.22": "{\"dependencies\":[{\"default_features\":false,\"name\":\"arrayvec05\",\"optional\":true,\"package\":\"arrayvec\",\"req\":\"^0.5\"},{\"default_features\":false,\"name\":\"arrayvec07\",\"optional\":true,\"package\":\"arrayvec\",\"req\":\"^0.7\"},{\"default_features\":false,\"name\":\"bigdecimal03\",\"optional\":true,\"package\":\"bigdecimal\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"bigdecimal04\",\"optional\":true,\"package\":\"bigdecimal\",\"req\":\"^0.4\"},{\"name\":\"bytes\",\"optional\":true,\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"chrono\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"dyn-clone\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"either\",\"optional\":true,\"req\":\"^1.3\"},{\"name\":\"enumset\",\"optional\":true,\"req\":\"^1.0\"},{\"features\":[\"serde-1\"],\"name\":\"indexmap\",\"optional\":true,\"req\":\"^1.2\"},{\"features\":[\"serde\"],\"name\":\"indexmap2\",\"optional\":true,\"package\":\"indexmap\",\"req\":\"^2.0\"},{\"kind\":\"dev\",\"name\":\"pretty_assertions\",\"req\":\"^1.2.1\"},{\"default_features\":false,\"name\":\"rust_decimal\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"schemars_derive\",\"optional\":true,\"req\":\"=0.8.22\"},{\"features\":[\"serde\"],\"name\":\"semver\",\"optional\":true,\"req\":\"^1.0.9\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"req\":\"^1.0\"},{\"name\":\"serde_json\",\"req\":\"^1.0.25\"},{\"name\":\"smallvec\",\"optional\":true,\"req\":\"^1.0\"},{\"name\":\"smol_str\",\"optional\":true,\"req\":\"^0.1.17\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"url\",\"optional\":true,\"req\":\"^2.0\"},{\"default_features\":false,\"name\":\"uuid08\",\"optional\":true,\"package\":\"uuid\",\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"uuid1\",\"optional\":true,\"package\":\"uuid\",\"req\":\"^1.0\"}],\"features\":{\"arrayvec\":[\"arrayvec05\"],\"bigdecimal\":[\"bigdecimal03\"],\"default\":[\"derive\"],\"derive\":[\"schemars_derive\"],\"derive_json_schema\":[\"impl_json_schema\"],\"impl_json_schema\":[\"derive\"],\"indexmap1\":[\"indexmap\"],\"preserve_order\":[\"indexmap\"],\"raw_value\":[\"serde_json/raw_value\"],\"ui_test\":[],\"uuid\":[\"uuid08\"]}}", @@ -1093,9 +1095,9 @@ "scopeguard_1.2.0": "{\"dependencies\":[],\"features\":{\"default\":[\"use_std\"],\"use_std\":[]}}", "scroll_0.13.0": "{\"dependencies\":[{\"name\":\"scroll_derive\",\"optional\":true,\"req\":\"^0.13\"}],\"features\":{\"default\":[\"std\"],\"derive\":[\"dep:scroll_derive\"],\"std\":[]}}", "scroll_derive_0.13.1": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"scroll\",\"req\":\"^0.13\"},{\"name\":\"syn\",\"req\":\"^2\"}],\"features\":{}}", - "scrypt_0.11.0": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"rand_core\"],\"name\":\"password-hash\",\"optional\":true,\"req\":\"^0.5\"},{\"features\":[\"rand_core\"],\"kind\":\"dev\",\"name\":\"password-hash\",\"req\":\"^0.5\"},{\"name\":\"pbkdf2\",\"req\":\"^0.12\"},{\"default_features\":false,\"name\":\"salsa20\",\"req\":\"^0.10.2\"},{\"default_features\":false,\"name\":\"sha2\",\"req\":\"^0.10\"}],\"features\":{\"default\":[\"simple\",\"std\"],\"simple\":[\"password-hash\"],\"std\":[\"password-hash/std\"]}}", + "scrypt_0.12.0": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1.0\"},{\"name\":\"ctutils\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"kdf\",\"optional\":true,\"req\":\"^0.1\"},{\"name\":\"mcf\",\"optional\":true,\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"password-hash\",\"optional\":true,\"req\":\"^0.6\"},{\"name\":\"pbkdf2\",\"req\":\"^0.13\"},{\"name\":\"rayon\",\"optional\":true,\"req\":\"^1.11\"},{\"default_features\":false,\"name\":\"salsa20\",\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"sha2\",\"req\":\"^0.11\"}],\"features\":{\"alloc\":[\"password-hash?/alloc\"],\"getrandom\":[\"password-hash\",\"password-hash/getrandom\"],\"kdf\":[\"alloc\",\"dep:kdf\"],\"mcf\":[\"alloc\",\"phc\",\"dep:ctutils\",\"dep:mcf\"],\"parallel\":[\"dep:rayon\"],\"phc\":[\"password-hash/phc\"],\"rand_core\":[\"password-hash/rand_core\"]}}", "sct_0.7.1": "{\"dependencies\":[{\"name\":\"ring\",\"req\":\"^0.17.0\"},{\"name\":\"untrusted\",\"req\":\"^0.9.0\"}],\"features\":{}}", - "sec1_0.7.3": "{\"dependencies\":[{\"default_features\":false,\"name\":\"base16ct\",\"optional\":true,\"req\":\"^0.2\"},{\"features\":[\"oid\"],\"name\":\"der\",\"optional\":true,\"req\":\"^0.7\"},{\"default_features\":false,\"name\":\"generic-array\",\"optional\":true,\"req\":\"^0.14.7\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"pkcs8\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"subtle\",\"optional\":true,\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"der?/alloc\",\"pkcs8?/alloc\",\"zeroize?/alloc\"],\"default\":[\"der\",\"point\"],\"der\":[\"dep:der\",\"zeroize\"],\"pem\":[\"alloc\",\"der/pem\",\"pkcs8/pem\"],\"point\":[\"dep:base16ct\",\"dep:generic-array\"],\"serde\":[\"dep:serdect\"],\"std\":[\"alloc\",\"der?/std\"],\"zeroize\":[\"dep:zeroize\",\"der?/zeroize\"]}}", + "sec1_0.8.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"base16ct\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"ctutils\",\"optional\":true,\"req\":\"^0.4\"},{\"features\":[\"oid\"],\"name\":\"der\",\"optional\":true,\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"hybrid-array\",\"optional\":true,\"req\":\"^0.4.6\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"serdect\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"subtle\",\"optional\":true,\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"der?/alloc\",\"zeroize?/alloc\"],\"default\":[\"der\",\"point\"],\"der\":[\"dep:der\",\"zeroize\"],\"pem\":[\"alloc\",\"der/pem\"],\"point\":[\"dep:base16ct\",\"dep:hybrid-array\"],\"serde\":[\"dep:serdect\"],\"std\":[\"alloc\",\"der?/std\"],\"zeroize\":[\"dep:zeroize\",\"der?/zeroize\"]}}", "seccompiler_0.5.0": "{\"dependencies\":[{\"name\":\"libc\",\"req\":\"^0.2.153\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.27\"},{\"name\":\"serde_json\",\"optional\":true,\"req\":\"^1.0.9\"}],\"features\":{\"json\":[\"serde\",\"serde_json\"]}}", "secrecy_0.8.0": "{\"dependencies\":[{\"name\":\"bytes\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"serde\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"name\":\"zeroize\",\"req\":\"^1.4\"}],\"features\":{\"alloc\":[\"zeroize/alloc\"],\"default\":[\"alloc\"]}}", "security-framework-sys_2.17.0": "{\"dependencies\":[{\"name\":\"core-foundation-sys\",\"req\":\"^0.8.7\"},{\"name\":\"libc\",\"req\":\"^0.2.150\"}],\"features\":{\"OSX_10_10\":[],\"OSX_10_11\":[],\"OSX_10_12\":[],\"OSX_10_13\":[],\"OSX_10_14\":[],\"OSX_10_15\":[],\"OSX_10_9\":[],\"default\":[\"OSX_10_13\"],\"macos-12\":[]}}", @@ -1121,6 +1123,7 @@ "sha1_smol_1.0.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"openssl\",\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.4\"},{\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"}],\"features\":{\"alloc\":[],\"std\":[\"alloc\"]}}", "sha2_0.10.9": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1.0\"},{\"name\":\"cpufeatures\",\"req\":\"^0.2\",\"target\":\"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\"},{\"name\":\"digest\",\"req\":\"^0.10.7\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"digest\",\"req\":\"^0.10.7\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.2.2\"},{\"name\":\"sha2-asm\",\"optional\":true,\"req\":\"^0.6.1\",\"target\":\"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\"}],\"features\":{\"asm\":[\"sha2-asm\"],\"asm-aarch64\":[\"asm\"],\"compress\":[],\"default\":[\"std\"],\"force-soft\":[],\"force-soft-compact\":[],\"loongarch64_asm\":[],\"oid\":[\"digest/oid\"],\"std\":[\"digest/std\"]}}", "sha2_0.11.0": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1\"},{\"name\":\"cpufeatures\",\"req\":\"^0.3\",\"target\":\"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\"},{\"name\":\"digest\",\"req\":\"^0.11\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"digest\",\"req\":\"^0.11\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"}],\"features\":{\"alloc\":[\"digest/alloc\"],\"default\":[\"alloc\",\"oid\"],\"oid\":[\"digest/oid\"],\"zeroize\":[\"digest/zeroize\"]}}", + "sha3_0.11.0": "{\"dependencies\":[{\"name\":\"digest\",\"req\":\"^0.11\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"digest\",\"req\":\"^0.11\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"keccak\",\"req\":\"^0.2\"}],\"features\":{\"alloc\":[\"digest/alloc\"],\"default\":[\"alloc\",\"oid\"],\"oid\":[\"digest/oid\"],\"zeroize\":[\"digest/zeroize\"]}}", "sharded-slab_0.1.7": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"indexmap\",\"req\":\"^1\"},{\"name\":\"lazy_static\",\"req\":\"^1\"},{\"features\":[\"checkpoint\"],\"name\":\"loom\",\"optional\":true,\"req\":\"^0.5\",\"target\":\"cfg(loom)\"},{\"features\":[\"checkpoint\"],\"kind\":\"dev\",\"name\":\"loom\",\"req\":\"^0.5\",\"target\":\"cfg(loom)\"},{\"kind\":\"dev\",\"name\":\"memory-stats\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"slab\",\"req\":\"^0.4.2\"}],\"features\":{}}", "shell-escape_0.1.5": "{\"dependencies\":[],\"features\":{}}", "shell-words_1.1.1": "{\"dependencies\":[],\"features\":{\"default\":[\"std\"],\"std\":[]}}", @@ -1129,7 +1132,7 @@ "signal-hook-registry_1.4.8": "{\"dependencies\":[{\"name\":\"errno\",\"req\":\">=0.2, <0.4\"},{\"name\":\"libc\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"signal-hook\",\"req\":\"~0.3\"}],\"features\":{}}", "signal-hook_0.3.18": "{\"dependencies\":[{\"kind\":\"build\",\"name\":\"cc\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"libc\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"serial_test\",\"req\":\"^0.7\"},{\"name\":\"signal-hook-registry\",\"req\":\"^1.4\"}],\"features\":{\"channel\":[],\"default\":[\"channel\",\"iterator\"],\"extended-siginfo\":[\"channel\",\"iterator\",\"extended-siginfo-raw\"],\"extended-siginfo-raw\":[\"cc\"],\"iterator\":[\"channel\"]}}", "signature_2.2.0": "{\"dependencies\":[{\"name\":\"derive\",\"optional\":true,\"package\":\"signature_derive\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"digest\",\"optional\":true,\"req\":\"^0.10.6\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.6.4\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"sha2\",\"req\":\"^0.10\"}],\"features\":{\"alloc\":[],\"std\":[\"alloc\",\"rand_core?/std\"]}}", - "signature_3.0.0-rc.6": "{\"dependencies\":[{\"default_features\":false,\"name\":\"digest\",\"optional\":true,\"req\":\"^0.11.0-rc.5\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10.0-rc-3\"}],\"features\":{\"alloc\":[],\"rand_core\":[\"dep:rand_core\"]}}", + "signature_3.0.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"digest\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"}],\"features\":{\"alloc\":[],\"rand_core\":[\"dep:rand_core\"]}}", "simd-adler32_0.3.9": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"adler\",\"req\":\"^1.0.2\"},{\"kind\":\"dev\",\"name\":\"adler32\",\"req\":\"^1.2.0\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3\"},{\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8\"}],\"features\":{\"const-generics\":[],\"default\":[\"std\",\"const-generics\"],\"nightly\":[],\"std\":[]}}", "simple_asn1_0.6.4": "{\"dependencies\":[{\"default_features\":false,\"name\":\"num-bigint\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"num-traits\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1.0.3\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.4\"},{\"default_features\":false,\"name\":\"thiserror\",\"req\":\"^2\"},{\"default_features\":false,\"features\":[\"formatting\",\"macros\",\"parsing\"],\"name\":\"time\",\"req\":\"^0.3.47\"},{\"default_features\":false,\"features\":[\"formatting\",\"macros\",\"parsing\",\"quickcheck\"],\"kind\":\"dev\",\"name\":\"time\",\"req\":\"^0.3\"}],\"features\":{}}", "sketches-ddsketch_0.3.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"approx\",\"req\":\"^0.5.1\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.5\"},{\"kind\":\"dev\",\"name\":\"rand_distr\",\"req\":\"^0.4.3\"},{\"features\":[\"derive\",\"serde_derive\"],\"name\":\"serde\",\"optional\":true,\"package\":\"serde\",\"req\":\"^1.0\"}],\"features\":{\"use_serde\":[\"serde\",\"serde/derive\"]}}", @@ -1148,8 +1151,9 @@ "sqlx-postgres_0.8.6": "{\"dependencies\":[{\"name\":\"atoi\",\"req\":\"^2.0\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"base64\",\"req\":\"^0.22.0\"},{\"name\":\"bigdecimal\",\"optional\":true,\"req\":\"^0.4.0\"},{\"name\":\"bit-vec\",\"optional\":true,\"req\":\"^0.6.3\"},{\"default_features\":false,\"name\":\"bitflags\",\"req\":\"^2\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"byteorder\",\"req\":\"^1.4.3\"},{\"default_features\":false,\"features\":[\"std\",\"clock\"],\"name\":\"chrono\",\"optional\":true,\"req\":\"^0.4.34\"},{\"name\":\"crc\",\"req\":\"^3.0.0\"},{\"default_features\":false,\"name\":\"dotenvy\",\"req\":\"^0.15.7\"},{\"name\":\"etcetera\",\"req\":\"^0.8.0\",\"target\":\"cfg(target_os = \\\"windows\\\")\"},{\"default_features\":false,\"features\":[\"sink\",\"alloc\",\"std\"],\"name\":\"futures-channel\",\"req\":\"^0.3.19\"},{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3.19\"},{\"default_features\":false,\"features\":[\"alloc\",\"sink\",\"io\"],\"name\":\"futures-util\",\"req\":\"^0.3.19\"},{\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"name\":\"hkdf\",\"req\":\"^0.12.0\"},{\"default_features\":false,\"features\":[\"reset\"],\"name\":\"hmac\",\"req\":\"^0.12.0\"},{\"name\":\"home\",\"req\":\"^0.5.5\"},{\"name\":\"ipnet\",\"optional\":true,\"req\":\"^2.3.0\"},{\"name\":\"ipnetwork\",\"optional\":true,\"req\":\"^0.20.0\"},{\"name\":\"itoa\",\"req\":\"^1.0.1\"},{\"name\":\"log\",\"req\":\"^0.4.18\"},{\"name\":\"mac_address\",\"optional\":true,\"req\":\"^1.1.5\"},{\"default_features\":false,\"name\":\"md-5\",\"req\":\"^0.10.0\"},{\"default_features\":false,\"name\":\"memchr\",\"req\":\"^2.4.1\"},{\"name\":\"num-bigint\",\"optional\":true,\"req\":\"^0.4.3\"},{\"name\":\"once_cell\",\"req\":\"^1.9.0\"},{\"default_features\":false,\"features\":[\"std\",\"std_rng\"],\"name\":\"rand\",\"req\":\"^0.8.4\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"rust_decimal\",\"optional\":true,\"req\":\"^1.26.1\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"req\":\"^1.0.144\"},{\"features\":[\"raw_value\"],\"name\":\"serde_json\",\"req\":\"^1.0.85\"},{\"default_features\":false,\"name\":\"sha2\",\"req\":\"^0.10.0\"},{\"features\":[\"serde\"],\"name\":\"smallvec\",\"req\":\"^1.7.0\"},{\"default_features\":false,\"features\":[\"postgres\",\"derive\"],\"kind\":\"dev\",\"name\":\"sqlx\",\"req\":\"=0.8.6\"},{\"features\":[\"json\"],\"name\":\"sqlx-core\",\"req\":\"=0.8.6\"},{\"name\":\"stringprep\",\"req\":\"^0.1.2\"},{\"name\":\"thiserror\",\"req\":\"^2.0.0\"},{\"features\":[\"formatting\",\"parsing\",\"macros\"],\"name\":\"time\",\"optional\":true,\"req\":\"^0.3.36\"},{\"features\":[\"log\"],\"name\":\"tracing\",\"req\":\"^0.1.37\"},{\"name\":\"uuid\",\"optional\":true,\"req\":\"^1.1.2\"},{\"default_features\":false,\"name\":\"whoami\",\"req\":\"^1.2.1\"}],\"features\":{\"any\":[\"sqlx-core/any\"],\"bigdecimal\":[\"dep:bigdecimal\",\"dep:num-bigint\",\"sqlx-core/bigdecimal\"],\"bit-vec\":[\"dep:bit-vec\",\"sqlx-core/bit-vec\"],\"chrono\":[\"dep:chrono\",\"sqlx-core/chrono\"],\"ipnet\":[\"dep:ipnet\",\"sqlx-core/ipnet\"],\"ipnetwork\":[\"dep:ipnetwork\",\"sqlx-core/ipnetwork\"],\"json\":[\"sqlx-core/json\"],\"mac_address\":[\"dep:mac_address\",\"sqlx-core/mac_address\"],\"migrate\":[\"sqlx-core/migrate\"],\"offline\":[\"sqlx-core/offline\"],\"rust_decimal\":[\"dep:rust_decimal\",\"rust_decimal/maths\",\"sqlx-core/rust_decimal\"],\"time\":[\"dep:time\",\"sqlx-core/time\"],\"uuid\":[\"dep:uuid\",\"sqlx-core/uuid\"]}}", "sqlx-sqlite_0.8.6": "{\"dependencies\":[{\"name\":\"atoi\",\"req\":\"^2.0\"},{\"default_features\":false,\"features\":[\"std\",\"clock\"],\"name\":\"chrono\",\"optional\":true,\"req\":\"^0.4.34\"},{\"default_features\":false,\"features\":[\"async\"],\"name\":\"flume\",\"req\":\"^0.11.0\"},{\"default_features\":false,\"features\":[\"sink\",\"alloc\",\"std\"],\"name\":\"futures-channel\",\"req\":\"^0.3.19\"},{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3.19\"},{\"name\":\"futures-executor\",\"req\":\"^0.3.19\"},{\"name\":\"futures-intrusive\",\"req\":\"^0.5.0\"},{\"default_features\":false,\"features\":[\"alloc\",\"sink\"],\"name\":\"futures-util\",\"req\":\"^0.3.19\"},{\"default_features\":false,\"features\":[\"pkg-config\",\"vcpkg\",\"unlock_notify\"],\"name\":\"libsqlite3-sys\",\"req\":\"^0.30.1\"},{\"name\":\"log\",\"req\":\"^0.4.18\"},{\"name\":\"percent-encoding\",\"req\":\"^2.1.0\"},{\"name\":\"regex\",\"optional\":true,\"req\":\"^1.5.5\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.145\"},{\"name\":\"serde_urlencoded\",\"req\":\"^0.7\"},{\"default_features\":false,\"features\":[\"macros\",\"runtime-tokio\",\"tls-none\",\"sqlite\"],\"kind\":\"dev\",\"name\":\"sqlx\",\"req\":\"=0.8.6\"},{\"name\":\"sqlx-core\",\"req\":\"=0.8.6\"},{\"name\":\"thiserror\",\"req\":\"^2.0.0\"},{\"features\":[\"formatting\",\"parsing\",\"macros\"],\"name\":\"time\",\"optional\":true,\"req\":\"^0.3.36\"},{\"features\":[\"log\"],\"name\":\"tracing\",\"req\":\"^0.1.37\"},{\"name\":\"url\",\"req\":\"^2.2.2\"},{\"name\":\"uuid\",\"optional\":true,\"req\":\"^1.1.2\"}],\"features\":{\"any\":[\"sqlx-core/any\"],\"bundled\":[\"libsqlite3-sys/bundled\"],\"chrono\":[\"dep:chrono\",\"sqlx-core/chrono\"],\"json\":[\"sqlx-core/json\",\"serde\"],\"migrate\":[\"sqlx-core/migrate\"],\"offline\":[\"sqlx-core/offline\",\"serde\"],\"preupdate-hook\":[\"libsqlite3-sys/preupdate_hook\"],\"regexp\":[\"dep:regex\"],\"time\":[\"dep:time\",\"sqlx-core/time\"],\"unbundled\":[\"libsqlite3-sys/buildtime_bindgen\"],\"uuid\":[\"dep:uuid\",\"sqlx-core/uuid\"]}}", "sqlx_0.8.6": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0.52\"},{\"features\":[\"attributes\"],\"kind\":\"dev\",\"name\":\"async-std\",\"req\":\"^1.12\"},{\"features\":[\"async_tokio\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.1\"},{\"kind\":\"dev\",\"name\":\"dotenvy\",\"req\":\"^0.15.0\"},{\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.11\"},{\"kind\":\"dev\",\"name\":\"futures\",\"req\":\"^0.3.19\"},{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"kind\":\"dev\",\"name\":\"libsqlite3-sys\",\"req\":\"^0.30.1\"},{\"features\":[\"bundled-sqlcipher\"],\"kind\":\"dev\",\"name\":\"libsqlite3-sys\",\"req\":\"^0.30.1\",\"target\":\"cfg(sqlite_test_sqlcipher)\"},{\"kind\":\"dev\",\"name\":\"paste\",\"req\":\"^1.0.6\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.4\"},{\"kind\":\"dev\",\"name\":\"rand_xoshiro\",\"req\":\"^0.6.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.132\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.73\"},{\"features\":[\"offline\",\"migrate\"],\"name\":\"sqlx-core\",\"req\":\"=0.8.6\"},{\"name\":\"sqlx-macros\",\"optional\":true,\"req\":\"=0.8.6\"},{\"name\":\"sqlx-mysql\",\"optional\":true,\"req\":\"=0.8.6\"},{\"name\":\"sqlx-postgres\",\"optional\":true,\"req\":\"=0.8.6\"},{\"name\":\"sqlx-sqlite\",\"optional\":true,\"req\":\"=0.8.6\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.10.1\"},{\"kind\":\"dev\",\"name\":\"time_\",\"package\":\"time\",\"req\":\"^0.3.2\"},{\"features\":[\"full\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.15.0\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.53\"},{\"kind\":\"dev\",\"name\":\"url\",\"req\":\"^2.2.2\"}],\"features\":{\"_rt-async-std\":[],\"_rt-tokio\":[],\"_sqlite\":[],\"_unstable-all-types\":[\"bigdecimal\",\"rust_decimal\",\"json\",\"time\",\"chrono\",\"ipnet\",\"ipnetwork\",\"mac_address\",\"uuid\",\"bit-vec\",\"bstr\"],\"all-databases\":[\"mysql\",\"sqlite\",\"postgres\",\"any\"],\"any\":[\"sqlx-core/any\",\"sqlx-mysql?/any\",\"sqlx-postgres?/any\",\"sqlx-sqlite?/any\"],\"bigdecimal\":[\"sqlx-core/bigdecimal\",\"sqlx-macros?/bigdecimal\",\"sqlx-mysql?/bigdecimal\",\"sqlx-postgres?/bigdecimal\"],\"bit-vec\":[\"sqlx-core/bit-vec\",\"sqlx-macros?/bit-vec\",\"sqlx-postgres?/bit-vec\"],\"bstr\":[\"sqlx-core/bstr\"],\"chrono\":[\"sqlx-core/chrono\",\"sqlx-macros?/chrono\",\"sqlx-mysql?/chrono\",\"sqlx-postgres?/chrono\",\"sqlx-sqlite?/chrono\"],\"default\":[\"any\",\"macros\",\"migrate\",\"json\"],\"derive\":[\"sqlx-macros/derive\"],\"ipnet\":[\"sqlx-core/ipnet\",\"sqlx-macros?/ipnet\",\"sqlx-postgres?/ipnet\"],\"ipnetwork\":[\"sqlx-core/ipnetwork\",\"sqlx-macros?/ipnetwork\",\"sqlx-postgres?/ipnetwork\"],\"json\":[\"sqlx-core/json\",\"sqlx-macros?/json\",\"sqlx-mysql?/json\",\"sqlx-postgres?/json\",\"sqlx-sqlite?/json\"],\"mac_address\":[\"sqlx-core/mac_address\",\"sqlx-macros?/mac_address\",\"sqlx-postgres?/mac_address\"],\"macros\":[\"derive\",\"sqlx-macros/macros\"],\"migrate\":[\"sqlx-core/migrate\",\"sqlx-macros?/migrate\",\"sqlx-mysql?/migrate\",\"sqlx-postgres?/migrate\",\"sqlx-sqlite?/migrate\"],\"mysql\":[\"sqlx-mysql\",\"sqlx-macros?/mysql\"],\"postgres\":[\"sqlx-postgres\",\"sqlx-macros?/postgres\"],\"regexp\":[\"sqlx-sqlite?/regexp\"],\"runtime-async-std\":[\"_rt-async-std\",\"sqlx-core/_rt-async-std\",\"sqlx-macros?/_rt-async-std\"],\"runtime-async-std-native-tls\":[\"runtime-async-std\",\"tls-native-tls\"],\"runtime-async-std-rustls\":[\"runtime-async-std\",\"tls-rustls-ring\"],\"runtime-tokio\":[\"_rt-tokio\",\"sqlx-core/_rt-tokio\",\"sqlx-macros?/_rt-tokio\"],\"runtime-tokio-native-tls\":[\"runtime-tokio\",\"tls-native-tls\"],\"runtime-tokio-rustls\":[\"runtime-tokio\",\"tls-rustls-ring\"],\"rust_decimal\":[\"sqlx-core/rust_decimal\",\"sqlx-macros?/rust_decimal\",\"sqlx-mysql?/rust_decimal\",\"sqlx-postgres?/rust_decimal\"],\"sqlite\":[\"_sqlite\",\"sqlx-sqlite/bundled\",\"sqlx-macros?/sqlite\"],\"sqlite-preupdate-hook\":[\"sqlx-sqlite/preupdate-hook\"],\"sqlite-unbundled\":[\"_sqlite\",\"sqlx-sqlite/unbundled\",\"sqlx-macros?/sqlite-unbundled\"],\"time\":[\"sqlx-core/time\",\"sqlx-macros?/time\",\"sqlx-mysql?/time\",\"sqlx-postgres?/time\",\"sqlx-sqlite?/time\"],\"tls-native-tls\":[\"sqlx-core/_tls-native-tls\",\"sqlx-macros?/_tls-native-tls\"],\"tls-none\":[],\"tls-rustls\":[\"tls-rustls-ring\"],\"tls-rustls-aws-lc-rs\":[\"sqlx-core/_tls-rustls-aws-lc-rs\",\"sqlx-macros?/_tls-rustls-aws-lc-rs\"],\"tls-rustls-ring\":[\"tls-rustls-ring-webpki\"],\"tls-rustls-ring-native-roots\":[\"sqlx-core/_tls-rustls-ring-native-roots\",\"sqlx-macros?/_tls-rustls-ring-native-roots\"],\"tls-rustls-ring-webpki\":[\"sqlx-core/_tls-rustls-ring-webpki\",\"sqlx-macros?/_tls-rustls-ring-webpki\"],\"uuid\":[\"sqlx-core/uuid\",\"sqlx-macros?/uuid\",\"sqlx-mysql?/uuid\",\"sqlx-postgres?/uuid\",\"sqlx-sqlite?/uuid\"]}}", - "ssh-cipher_0.2.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"aes\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"features\":[\"aes\"],\"name\":\"aes-gcm\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"cbc\",\"optional\":true,\"req\":\"^0.1\"},{\"default_features\":false,\"name\":\"chacha20\",\"optional\":true,\"req\":\"^0.9\"},{\"name\":\"cipher\",\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"ctr\",\"optional\":true,\"req\":\"^0.9\"},{\"default_features\":false,\"name\":\"des\",\"optional\":true,\"req\":\"^0.8\"},{\"name\":\"encoding\",\"package\":\"ssh-encoding\",\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"poly1305\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"subtle\",\"optional\":true,\"req\":\"^2\"}],\"features\":{\"aes-cbc\":[\"dep:aes\",\"dep:cbc\"],\"aes-ctr\":[\"dep:aes\",\"dep:ctr\"],\"aes-gcm\":[\"dep:aes\",\"dep:aes-gcm\"],\"chacha20poly1305\":[\"dep:chacha20\",\"dep:poly1305\",\"dep:subtle\"],\"std\":[],\"tdes\":[\"dep:des\",\"dep:cbc\"]}}", - "ssh-encoding_0.2.0": "{\"dependencies\":[{\"name\":\"base64\",\"optional\":true,\"package\":\"base64ct\",\"req\":\"^1.4\"},{\"default_features\":false,\"name\":\"bytes\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.4.1\"},{\"name\":\"pem\",\"optional\":true,\"package\":\"pem-rfc7468\",\"req\":\"^0.7\"},{\"default_features\":false,\"name\":\"sha2\",\"optional\":true,\"req\":\"^0.10\"}],\"features\":{\"alloc\":[\"base64?/alloc\",\"pem?/alloc\"],\"bytes\":[\"alloc\",\"dep:bytes\"],\"pem\":[\"base64\",\"dep:pem\"],\"std\":[\"alloc\",\"base64?/std\",\"pem?/std\",\"sha2?/std\"]}}", + "ssh-cipher_0.3.0-rc.9": "{\"dependencies\":[{\"default_features\":false,\"name\":\"aead\",\"optional\":true,\"req\":\"^0.6.0-rc.10\"},{\"default_features\":false,\"name\":\"aes\",\"optional\":true,\"req\":\"^0.9\"},{\"default_features\":false,\"features\":[\"aes\"],\"name\":\"aes-gcm\",\"optional\":true,\"req\":\"^0.11.0-rc.3\"},{\"name\":\"cbc\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"features\":[\"cipher\",\"legacy\"],\"name\":\"chacha20\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"cipher\",\"req\":\"^0.5\"},{\"default_features\":false,\"name\":\"ctr\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"name\":\"ctutils\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"des\",\"optional\":true,\"req\":\"^0.9\"},{\"name\":\"encoding\",\"package\":\"ssh-encoding\",\"req\":\"^0.3.0-rc.9\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"poly1305\",\"optional\":true,\"req\":\"^0.9\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"aes-cbc\":[\"dep:aes\",\"dep:cbc\"],\"aes-ctr\":[\"dep:aes\",\"dep:ctr\"],\"aes-gcm\":[\"dep:aead\",\"dep:aes\",\"dep:aes-gcm\"],\"chacha20poly1305\":[\"dep:aead\",\"dep:chacha20\",\"dep:poly1305\",\"dep:ctutils\"],\"tdes\":[\"dep:des\",\"dep:cbc\"],\"zeroize\":[\"dep:zeroize\",\"aes?/zeroize\",\"aes-gcm?/zeroize\",\"chacha20?/zeroize\",\"des?/zeroize\",\"poly1305?/zeroize\"]}}", + "ssh-encoding_0.3.0-rc.9": "{\"dependencies\":[{\"name\":\"base64ct\",\"optional\":true,\"req\":\"^1.8\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"bigint\",\"optional\":true,\"package\":\"crypto-bigint\",\"req\":\"^0.7\"},{\"default_features\":false,\"name\":\"bytes\",\"optional\":true,\"req\":\"^1.11\"},{\"default_features\":false,\"name\":\"ctutils\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"digest\",\"optional\":true,\"req\":\"^0.11\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"pem-rfc7468\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"ssh-derive\",\"optional\":true,\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"alloc\":[\"base64ct?/alloc\",\"pem-rfc7468?/alloc\",\"zeroize?/alloc\"],\"base64\":[\"dep:base64ct\"],\"bigint\":[\"alloc\",\"zeroize\",\"dep:bigint\"],\"bytes\":[\"alloc\",\"dep:bytes\"],\"derive\":[\"ssh-derive\"],\"pem\":[\"base64\",\"dep:pem-rfc7468\"]}}", + "ssh-key_0.7.0-rc.10": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"argon2\",\"optional\":true,\"req\":\"^0.6.0-rc.8\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"bcrypt-pbkdf\",\"optional\":true,\"req\":\"^0.11\"},{\"features\":[\"rng\"],\"kind\":\"dev\",\"name\":\"chacha20\",\"req\":\"^0.10\"},{\"features\":[\"zeroize\"],\"name\":\"cipher\",\"package\":\"ssh-cipher\",\"req\":\"^0.3.0-rc.9\"},{\"default_features\":false,\"name\":\"ctutils\",\"req\":\"^0.4\"},{\"default_features\":false,\"features\":[\"hazmat\"],\"name\":\"dsa\",\"optional\":true,\"req\":\"^0.7.0-rc.15\"},{\"default_features\":false,\"name\":\"ed25519-dalek\",\"optional\":true,\"req\":\"^3.0.0-pre.7\"},{\"features\":[\"base64\",\"digest\",\"pem\",\"ctutils\",\"zeroize\"],\"name\":\"encoding\",\"package\":\"ssh-encoding\",\"req\":\"^0.3.0-rc.9\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"hex\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^1\"},{\"name\":\"hmac\",\"optional\":true,\"req\":\"^0.13\"},{\"default_features\":false,\"features\":[\"ecdsa\"],\"name\":\"p256\",\"optional\":true,\"req\":\"^0.14.0-rc.9\"},{\"default_features\":false,\"features\":[\"ecdsa\"],\"name\":\"p384\",\"optional\":true,\"req\":\"^0.14.0-rc.9\"},{\"default_features\":false,\"features\":[\"ecdsa\"],\"name\":\"p521\",\"optional\":true,\"req\":\"^0.14.0-rc.9\"},{\"default_features\":false,\"name\":\"rand_core\",\"optional\":true,\"req\":\"^0.10\"},{\"default_features\":false,\"features\":[\"sha2\"],\"name\":\"rsa\",\"optional\":true,\"req\":\"^0.10.0-rc.18\"},{\"default_features\":false,\"features\":[\"point\"],\"name\":\"sec1\",\"optional\":true,\"req\":\"^0.8\"},{\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.16\"},{\"default_features\":false,\"features\":[\"oid\"],\"name\":\"sha1\",\"optional\":true,\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"sha2\",\"req\":\"^0.11\"},{\"default_features\":false,\"name\":\"signature\",\"req\":\"^3\"},{\"default_features\":false,\"name\":\"zeroize\",\"req\":\"^1\"}],\"features\":{\"alloc\":[\"encoding/alloc\",\"signature/alloc\",\"zeroize/alloc\"],\"crypto\":[\"ed25519\",\"p256\",\"p384\",\"p521\",\"rsa\"],\"default\":[\"ecdsa\",\"rand_core\",\"std\"],\"dsa\":[\"dep:dsa\",\"dep:sha1\",\"alloc\",\"encoding/bigint\",\"signature/rand_core\"],\"ecdsa\":[\"dep:sec1\"],\"ed25519\":[\"dep:ed25519-dalek\",\"rand_core\"],\"encryption\":[\"dep:bcrypt-pbkdf\",\"alloc\",\"cipher/aes-cbc\",\"cipher/aes-ctr\",\"cipher/aes-gcm\",\"cipher/chacha20poly1305\",\"rand_core\"],\"p256\":[\"dep:p256\",\"ecdsa\"],\"p384\":[\"dep:p384\",\"ecdsa\"],\"p521\":[\"dep:p521\",\"ecdsa\"],\"ppk\":[\"dep:hex\",\"alloc\",\"cipher/aes-cbc\",\"dep:hmac\",\"dep:argon2\",\"dep:sha1\"],\"rsa\":[\"dep:rsa\",\"alloc\",\"encoding/bigint\",\"rand_core\"],\"sha1\":[\"dep:sha1\"],\"std\":[\"alloc\"],\"tdes\":[\"cipher/tdes\",\"encryption\"]}}", "stability_0.2.1": "{\"dependencies\":[{\"name\":\"quote\",\"req\":\"^1\"},{\"features\":[\"derive\",\"full\"],\"name\":\"syn\",\"req\":\"^2\"}],\"features\":{}}", "stable_deref_trait_1.2.1": "{\"dependencies\":[],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[\"alloc\"]}}", "static_assertions_1.1.0": "{\"dependencies\":[],\"features\":{\"nightly\":[]}}", @@ -1190,8 +1194,6 @@ "tinystr_0.8.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1.3.1\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"displaydoc\",\"req\":\"^0.2.3\"},{\"default_features\":false,\"features\":[\"use-std\"],\"kind\":\"dev\",\"name\":\"postcard\",\"req\":\"^1.0.3\"},{\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.220\"},{\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.45\"},{\"default_features\":false,\"name\":\"zerovec\",\"optional\":true,\"req\":\"^0.11.6\"}],\"features\":{\"alloc\":[\"serde_core?/alloc\",\"zerovec?/alloc\"],\"databake\":[\"dep:databake\"],\"default\":[\"alloc\"],\"serde\":[\"dep:serde_core\"],\"std\":[],\"zerovec\":[\"dep:zerovec\"]}}", "tinyvec_1.11.0": "{\"dependencies\":[{\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"name\":\"borsh\",\"optional\":true,\"req\":\"^1.2.0\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3.0\"},{\"kind\":\"dev\",\"name\":\"debugger_test\",\"req\":\"^0.1\"},{\"kind\":\"dev\",\"name\":\"debugger_test_parser\",\"req\":\"^0.1\"},{\"name\":\"defmt\",\"optional\":true,\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"generic-array\",\"optional\":true,\"req\":\"^1.1.1\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"smallvec\",\"req\":\"^1\"},{\"name\":\"tinyvec_macros\",\"optional\":true,\"req\":\"^0.1\"}],\"features\":{\"alloc\":[\"tinyvec_macros\"],\"debugger_visualizer\":[],\"default\":[],\"experimental_write_impl\":[],\"grab_spare_slice\":[],\"latest_stable_rust\":[\"rustc_1_61\"],\"nightly_slice_partition_dedup\":[],\"real_blackbox\":[\"criterion/real_blackbox\"],\"rustc_1_40\":[],\"rustc_1_55\":[],\"rustc_1_57\":[],\"rustc_1_61\":[\"rustc_1_57\"],\"serde\":[\"dep:serde_core\"],\"std\":[\"alloc\"]}}", "tinyvec_macros_0.1.1": "{\"dependencies\":[],\"features\":{}}", - "tls_codec_0.4.2": "{\"dependencies\":[{\"features\":[\"derive\"],\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.4\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.184\"},{\"name\":\"tls_codec_derive\",\"optional\":true,\"req\":\"=0.4.2\"},{\"default_features\":false,\"features\":[\"alloc\",\"zeroize_derive\"],\"name\":\"zeroize\",\"req\":\"^1.8\"}],\"features\":{\"arbitrary\":[\"std\",\"dep:arbitrary\"],\"conditional_deserialization\":[\"derive\",\"tls_codec_derive/conditional_deserialization\"],\"default\":[\"std\"],\"derive\":[\"tls_codec_derive\"],\"mls\":[],\"serde\":[\"std\",\"dep:serde\"],\"std\":[\"tls_codec_derive?/std\"]}}", - "tls_codec_derive_0.4.2": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1.0\"},{\"name\":\"quote\",\"req\":\"^1.0\"},{\"features\":[\"parsing\"],\"name\":\"syn\",\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1\"}],\"features\":{\"conditional_deserialization\":[\"syn/full\"],\"default\":[\"std\"],\"std\":[]}}", "tokio-macros_2.6.1": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1.0.60\"},{\"name\":\"quote\",\"req\":\"^1\"},{\"features\":[\"full\"],\"name\":\"syn\",\"req\":\"^2.0\"},{\"features\":[\"full\",\"test-util\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.0.0\"}],\"features\":{}}", "tokio-macros_2.7.0": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1.0.60\"},{\"name\":\"quote\",\"req\":\"^1\"},{\"features\":[\"full\"],\"name\":\"syn\",\"req\":\"^2.0\"},{\"features\":[\"full\",\"test-util\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.0.0\"}],\"features\":{}}", "tokio-rustls_0.24.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"argh\",\"req\":\"^0.1\"},{\"kind\":\"dev\",\"name\":\"futures-util\",\"req\":\"^0.3.1\"},{\"kind\":\"dev\",\"name\":\"lazy_static\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"rustls\",\"req\":\"^0.21.0\"},{\"kind\":\"dev\",\"name\":\"rustls-pemfile\",\"req\":\"^1\"},{\"name\":\"tokio\",\"req\":\"^1.0\"},{\"features\":[\"full\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.0\"},{\"features\":[\"alloc\",\"std\"],\"kind\":\"dev\",\"name\":\"webpki\",\"package\":\"rustls-webpki\",\"req\":\"^0.100.0\"},{\"kind\":\"dev\",\"name\":\"webpki-roots\",\"req\":\"^0.23.1\"}],\"features\":{\"dangerous_configuration\":[\"rustls/dangerous_configuration\"],\"default\":[\"logging\",\"tls12\"],\"early-data\":[],\"logging\":[\"rustls/logging\"],\"secret_extraction\":[\"rustls/secret_extraction\"],\"tls12\":[\"rustls/tls12\"]}}", @@ -1235,7 +1237,7 @@ "tungstenite_0.29.0": "{\"dependencies\":[{\"name\":\"bytes\",\"req\":\"^1.9.0\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.6\"},{\"name\":\"data-encoding\",\"optional\":true,\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.11\"},{\"name\":\"http\",\"optional\":true,\"req\":\"^1.0\"},{\"name\":\"httparse\",\"optional\":true,\"req\":\"^1.3.4\"},{\"kind\":\"dev\",\"name\":\"input_buffer\",\"req\":\"^0.5.0\"},{\"name\":\"log\",\"req\":\"^0.4.8\"},{\"name\":\"native-tls-crate\",\"optional\":true,\"package\":\"native-tls\",\"req\":\"^0.2.3\"},{\"name\":\"rand\",\"req\":\"^0.9.0\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9.0\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"rustls\",\"optional\":true,\"req\":\"^0.23.0\"},{\"name\":\"rustls-native-certs\",\"optional\":true,\"req\":\"^0.8.0\"},{\"name\":\"rustls-pki-types\",\"optional\":true,\"req\":\"^1.0\"},{\"name\":\"sha1\",\"optional\":true,\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"socket2\",\"req\":\"^0.6.0\"},{\"name\":\"thiserror\",\"req\":\"^2.0.7\"},{\"name\":\"url\",\"optional\":true,\"req\":\"^2.1.0\"},{\"name\":\"webpki-roots\",\"optional\":true,\"req\":\"^0.26\"}],\"features\":{\"__rustls-tls\":[\"rustls\",\"rustls-pki-types\"],\"default\":[\"handshake\"],\"handshake\":[\"data-encoding\",\"http\",\"httparse\",\"sha1\"],\"native-tls\":[\"native-tls-crate\"],\"native-tls-vendored\":[\"native-tls\",\"native-tls-crate/vendored\"],\"rustls-tls-native-roots\":[\"__rustls-tls\",\"rustls-native-certs\"],\"rustls-tls-webpki-roots\":[\"__rustls-tls\",\"webpki-roots\"],\"url\":[\"dep:url\"]}}", "twoway_0.1.8": "{\"dependencies\":[{\"name\":\"galil-seiferas\",\"optional\":true,\"req\":\"^0.1.1\"},{\"kind\":\"dev\",\"name\":\"itertools\",\"req\":\"^0.7.0\"},{\"features\":[\"unstable\"],\"name\":\"jetscii\",\"optional\":true,\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"macro-attr\",\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"memchr\",\"req\":\"^2.0\"},{\"kind\":\"dev\",\"name\":\"newtype_derive\",\"req\":\"^0.1\"},{\"kind\":\"dev\",\"name\":\"odds\",\"req\":\"^0.2.26\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^0.5\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.3.10\"},{\"name\":\"unchecked-index\",\"optional\":true,\"req\":\"^0.2.2\"}],\"features\":{\"all\":[\"jetscii\",\"pcmp\",\"pattern\",\"test-set\"],\"benchmarks\":[\"galil-seiferas\",\"pattern\",\"unchecked-index\"],\"default\":[\"use_std\"],\"pattern\":[],\"pcmp\":[\"unchecked-index\"],\"test-set\":[],\"use_std\":[\"memchr/use_std\"]}}", "typed-path_0.12.3": "{\"dependencies\":[],\"features\":{\"default\":[\"std\"],\"std\":[]}}", - "typenum_1.19.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"scale-info\",\"optional\":true,\"req\":\"^1.0\"}],\"features\":{\"const-generics\":[],\"force_unix_path_separator\":[],\"i128\":[],\"no_std\":[],\"scale_info\":[\"scale-info/derive\"],\"strict\":[]}}", + "typenum_1.20.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"scale-info\",\"optional\":true,\"req\":\"^1.0\"}],\"features\":{\"const-generics\":[],\"i128\":[],\"scale_info\":[\"scale-info/derive\"],\"strict\":[]}}", "ucd-trie_0.1.7": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"once_cell\",\"req\":\"^1\"}],\"features\":{\"default\":[\"std\"],\"std\":[]}}", "unicase_2.9.0": "{\"dependencies\":[],\"features\":{\"nightly\":[]}}", "unicode-bidi_0.3.18": "{\"dependencies\":[{\"name\":\"flame\",\"optional\":true,\"req\":\"^0.2\"},{\"name\":\"flamer\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\">=0.8, <2.0\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\">=0.8, <2.0\"},{\"features\":[\"union\"],\"name\":\"smallvec\",\"optional\":true,\"req\":\">=1.13\"}],\"features\":{\"bench_it\":[],\"default\":[\"std\",\"hardcoded-data\"],\"flame_it\":[\"flame\",\"flamer\"],\"hardcoded-data\":[],\"std\":[],\"unstable\":[],\"with_serde\":[\"serde\"]}}", @@ -1248,7 +1250,7 @@ "unicode-width_0.1.14": "{\"dependencies\":[{\"name\":\"compiler_builtins\",\"optional\":true,\"req\":\"^0.1\"},{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0\"},{\"name\":\"std\",\"optional\":true,\"package\":\"rustc-std-workspace-std\",\"req\":\"^1.0\"}],\"features\":{\"cjk\":[],\"default\":[\"cjk\"],\"no_std\":[],\"rustc-dep-of-std\":[\"std\",\"core\",\"compiler_builtins\"]}}", "unicode-width_0.2.2": "{\"dependencies\":[{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0\"},{\"name\":\"std\",\"optional\":true,\"package\":\"rustc-std-workspace-std\",\"req\":\"^1.0\"}],\"features\":{\"cjk\":[],\"default\":[\"cjk\"],\"no_std\":[],\"rustc-dep-of-std\":[\"std\",\"core\"]}}", "unicode-xid_0.2.6": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3\"}],\"features\":{\"bench\":[],\"default\":[],\"no_std\":[]}}", - "universal-hash_0.5.1": "{\"dependencies\":[{\"name\":\"crypto-common\",\"req\":\"^0.1.6\"},{\"default_features\":false,\"name\":\"subtle\",\"req\":\"^2.4\"}],\"features\":{\"std\":[\"crypto-common/std\"]}}", + "universal-hash_0.6.1": "{\"dependencies\":[{\"name\":\"common\",\"package\":\"crypto-common\",\"req\":\"^0.2\"},{\"name\":\"ctutils\",\"req\":\"^0.4\"}],\"features\":{}}", "unsafe-libyaml_0.2.11": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"pretty_assertions\",\"req\":\"^1.0\"}],\"features\":{}}", "untrusted_0.7.1": "{\"dependencies\":[],\"features\":{}}", "untrusted_0.9.0": "{\"dependencies\":[],\"features\":{}}", @@ -1380,7 +1382,8 @@ "zerofrom_0.1.7": "{\"dependencies\":[{\"default_features\":false,\"name\":\"zerofrom-derive\",\"optional\":true,\"req\":\"^0.1.6\"}],\"features\":{\"alloc\":[],\"default\":[\"alloc\"],\"derive\":[\"dep:zerofrom-derive\"]}}", "zerofrom_0.1.8": "{\"dependencies\":[{\"default_features\":false,\"name\":\"zerofrom-derive\",\"optional\":true,\"req\":\"^0.1.6\"}],\"features\":{\"alloc\":[],\"default\":[\"alloc\"],\"derive\":[\"dep:zerofrom-derive\"]}}", "zeroize_1.8.2": "{\"dependencies\":[{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"name\":\"zeroize_derive\",\"optional\":true,\"req\":\"^1.3\"}],\"features\":{\"aarch64\":[],\"alloc\":[],\"default\":[\"alloc\"],\"derive\":[\"zeroize_derive\"],\"simd\":[],\"std\":[\"alloc\"]}}", - "zeroize_derive_1.4.3": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"},{\"features\":[\"full\",\"extra-traits\",\"visit\"],\"name\":\"syn\",\"req\":\"^2\"}],\"features\":{}}", + "zeroize_1.9.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"zeroize_derive\",\"optional\":true,\"req\":\"^1.5\"}],\"features\":{\"aarch64\":[],\"alloc\":[],\"default\":[\"alloc\"],\"derive\":[\"zeroize_derive\"],\"simd\":[],\"std\":[\"alloc\"]}}", + "zeroize_derive_1.5.0": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"},{\"features\":[\"full\",\"extra-traits\",\"visit\"],\"name\":\"syn\",\"req\":\"^2\"}],\"features\":{}}", "zerotrie_0.2.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1.3.1\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"displaydoc\",\"req\":\"^0.2.3\"},{\"default_features\":false,\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"icu_locale_core\",\"req\":\"^2.2.0\"},{\"kind\":\"dev\",\"name\":\"itertools\",\"req\":\"^0.14.0\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"litemap\",\"optional\":true,\"req\":\"^0.8.0\"},{\"default_features\":false,\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"postcard\",\"req\":\"^1.0.3\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"rand_pcg\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"rmp-serde\",\"req\":\"^1.2.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.220\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.220\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.45\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"yoke\",\"optional\":true,\"req\":\"^0.8.2\"},{\"default_features\":false,\"name\":\"zerofrom\",\"optional\":true,\"req\":\"^0.1.6\"},{\"default_features\":false,\"name\":\"zerovec\",\"optional\":true,\"req\":\"^0.11.6\"}],\"features\":{\"alloc\":[\"zerovec?/alloc\"],\"databake\":[\"dep:databake\",\"zerovec?/databake\"],\"default\":[],\"dense\":[\"dep:zerovec\"],\"litemap\":[\"dep:litemap\",\"alloc\"],\"serde\":[\"dep:serde_core\",\"dep:litemap\",\"alloc\",\"litemap/serde\",\"zerovec?/serde\"],\"yoke\":[\"dep:yoke\"],\"zerofrom\":[\"dep:zerofrom\"],\"zerovec\":[\"dep:zerovec\"]}}", "zerovec-derive_0.11.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1.3.1\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.61\"},{\"name\":\"quote\",\"req\":\"^1.0.44\"},{\"default_features\":false,\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.220\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.45\"},{\"features\":[\"extra-traits\"],\"name\":\"syn\",\"req\":\"^2.0.21\"}],\"features\":{}}", "zerovec_0.11.6": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1.3.1\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"features\":[\"wasm_js\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"iai\",\"req\":\"^0.1.1\"},{\"features\":[\"json\"],\"kind\":\"dev\",\"name\":\"insta\",\"req\":\"^1.43.2\"},{\"default_features\":false,\"features\":[\"use-std\"],\"kind\":\"dev\",\"name\":\"postcard\",\"req\":\"^1.0.3\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"rand_distr\",\"req\":\"^0.5\"},{\"kind\":\"dev\",\"name\":\"rand_pcg\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"rmp-serde\",\"req\":\"^1.2.0\"},{\"default_features\":false,\"name\":\"schemars\",\"optional\":true,\"req\":\"^1.0.4\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.220\"},{\"default_features\":false,\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.220\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.45\"},{\"default_features\":false,\"features\":[\"xxhash64\"],\"name\":\"twox-hash\",\"optional\":true,\"req\":\"^2.0.0\"},{\"default_features\":false,\"name\":\"yoke\",\"optional\":true,\"req\":\"^0.8.2\"},{\"default_features\":false,\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"yoke\",\"req\":\"^0.8.2\"},{\"default_features\":false,\"name\":\"zerofrom\",\"req\":\"^0.1.6\"},{\"default_features\":false,\"name\":\"zerovec-derive\",\"optional\":true,\"req\":\"^0.11.3\"}],\"features\":{\"alloc\":[\"serde?/alloc\"],\"databake\":[\"dep:databake\"],\"derive\":[\"dep:zerovec-derive\"],\"hashmap\":[\"dep:twox-hash\",\"alloc\"],\"schemars\":[\"dep:schemars\",\"alloc\"],\"serde\":[\"dep:serde\"],\"std\":[],\"yoke\":[\"dep:yoke\"]}}", diff --git a/architecture/gateway.md b/architecture/gateway.md index c7569c3d5b..d57096f734 100644 --- a/architecture/gateway.md +++ b/architecture/gateway.md @@ -637,17 +637,21 @@ export: the table's presence is the on-switch, and `OTEL_EXPORTER_OTLP_ENDPOINT` is ignored so enablement has a single source. TOML decides whether and where to export; the SDK's `OTEL_*` variables tune how. Transport is OTLP over gRPC only. Shared provider, resource, and tracing-layer construction lives in -`openshell-otel`. - -Span emission requires no per-handler instrumentation. The `tower_http` -`TraceLayer` in `multiplex.rs` opens a span per inbound request, and that span -continues incoming W3C trace context when present or starts a new trace -otherwise. It is named for the RPC and carries the request ID that also appears -in the gateway's logs — the identifier that lets an operator pivot between a -trace and its log lines. Store and compute-driver spans become children of the -request span. Reconciliation, provider refresh, and driver-watch loops create -their own operation spans because they have no inbound request to provide a -parent. gRPC status is recorded when response trailers arrive. +`openshell-otel`, along with shared HTTP/tonic trace-context propagation and +gRPC failure recording. + +The `tower_http` `TraceLayer` in `multiplex.rs` opens a span per inbound request, +and that span continues incoming W3C trace context when present or starts a new +trace otherwise. It is named for the RPC and carries the request ID that also +appears in the gateway's logs — the identifier that lets an operator pivot +between a trace and its log lines. Store and compute-driver spans become +children of the request span. Reconciliation, provider refresh, and +driver-watch loops create their own operation spans because they have no +inbound request to provide a parent. gRPC status is recorded when response +trailers arrive. + +The gateway forwards OTLP configuration and W3C trace context to managed +external drivers. Each driver exports under its own service name. Two invariants shape the failure behavior. Telemetry is diagnostic, so no OTLP failure stops the gateway from serving: a malformed endpoint is logged at diff --git a/crates/openshell-driver-vm/Cargo.toml b/crates/openshell-driver-vm/Cargo.toml index cef3e67f88..0ee2740c77 100644 --- a/crates/openshell-driver-vm/Cargo.toml +++ b/crates/openshell-driver-vm/Cargo.toml @@ -20,12 +20,15 @@ path = "src/main.rs" [dependencies] openshell-core = { path = "../openshell-core", default-features = false } +openshell-otel = { path = "../openshell-otel" } openshell-policy = { path = "../openshell-policy" } openshell-vfio = { path = "../openshell-vfio" } bollard = { version = "0.20", features = ["ssh"] } tokio = { workspace = true } tonic = { workspace = true, features = ["transport"] } +tower-http = { workspace = true } +http = { workspace = true } prost = { workspace = true } prost-types = { workspace = true } futures = { workspace = true } @@ -34,6 +37,9 @@ nix = { workspace = true } clap = { workspace = true } tracing = { workspace = true } tracing-subscriber = { workspace = true } +opentelemetry = { workspace = true } +opentelemetry_sdk = { workspace = true } +tracing-opentelemetry = { workspace = true } miette = { workspace = true } url = { workspace = true } serde = { workspace = true } @@ -56,6 +62,9 @@ telemetry = ["openshell-core/telemetry"] [dev-dependencies] temp-env = "0.3" +tempfile = "3" +opentelemetry_sdk = { workspace = true, features = ["testing"] } +opentelemetry-proto = { version = "0.32", default-features = false, features = ["gen-tonic", "trace"] } # smol-rs/polling drives the BSD/macOS parent-death detection in # procguard via kqueue's EVFILT_PROC / NOTE_EXIT filter. We could use diff --git a/crates/openshell-driver-vm/README.md b/crates/openshell-driver-vm/README.md index 724bde06cb..23f75227a7 100644 --- a/crates/openshell-driver-vm/README.md +++ b/crates/openshell-driver-vm/README.md @@ -208,7 +208,7 @@ RUST_LOG=openshell_server=debug,openshell_driver_vm=debug \ mise run gateway:vm ``` -The VM guest's serial console is appended to `//console.log`. Sandbox IDs must match `[A-Za-z0-9._-]{1,128}` before the driver uses them in host paths. The gateway-owned compute-driver socket lives at `/run/compute-driver.sock`; OpenShell creates `run/` with owner-only permissions, removes same-owner stale sockets, and the gateway removes the socket on clean shutdown via `ManagedDriverProcess::drop`. UDS clients must match the driver UID and provide the expected gateway process PID by default. Standalone same-UID UDS mode requires the explicit `--allow-same-uid-peer` development flag. TCP mode is disabled by default because it is unauthenticated; use `--allow-unauthenticated-tcp --bind-address 127.0.0.1:50061` only for local development. +The VM guest's serial console is appended to `//console.log`. Sandbox IDs must match `[A-Za-z0-9._-]{1,128}` before the driver uses them in host paths. The gateway-owned compute-driver socket lives at `/run/compute-driver.sock`; OpenShell creates `run/` with owner-only permissions and removes same-owner stale sockets. On clean shutdown, the gateway sends the managed driver `SIGTERM`, waits up to five seconds for it to flush telemetry and exit, then force-kills it if necessary and removes the socket. UDS clients must match the driver UID and provide the expected gateway process PID by default. Standalone same-UID UDS mode requires the explicit `--allow-same-uid-peer` development flag. TCP mode is disabled by default because it is unauthenticated; use `--allow-unauthenticated-tcp --bind-address 127.0.0.1:50061` only for local development. ## Host-side nftables rules diff --git a/crates/openshell-driver-vm/src/driver.rs b/crates/openshell-driver-vm/src/driver.rs index 841457f38c..1099442f77 100644 --- a/crates/openshell-driver-vm/src/driver.rs +++ b/crates/openshell-driver-vm/src/driver.rs @@ -52,6 +52,7 @@ use openshell_core::proto_struct::{ deserialize_optional_non_empty_string_list, struct_to_json_value, }; use openshell_vfio::SysfsRoot; +use opentelemetry::trace::TraceContextExt as _; use prost::Message; use sha2::{Digest, Sha256}; use std::collections::{HashMap, HashSet}; @@ -72,7 +73,8 @@ use tokio::sync::{Mutex, broadcast, mpsc}; use tokio::task::JoinHandle; use tokio_stream::wrappers::ReceiverStream; use tonic::{Request, Response, Status}; -use tracing::{info, warn}; +use tracing::{Instrument as _, info, warn}; +use tracing_opentelemetry::OpenTelemetrySpanExt as _; use url::{Host, Url}; const DRIVER_NAME: &str = "openshell-driver-vm"; @@ -392,6 +394,27 @@ enum OverlayPreparation { PreserveExisting, } +fn provisioning_span( + parent: &opentelemetry::Context, + sandbox_id: &str, + image_ref: &str, +) -> tracing::Span { + let span = tracing::info_span!( + parent: None, + "vm.provision", + otel.name = "vm.provision", + otel.status_code = tracing::field::Empty, + sandbox.id = %sandbox_id, + image.ref = %image_ref, + ); + let parent_span_context = parent.span().span_context().clone(); + if parent_span_context.is_valid() { + let parent = opentelemetry::Context::new().with_remote_span_context(parent_span_context); + let _ = span.set_parent(parent); + } + span +} + #[derive(Clone)] pub struct VmDriver { config: VmDriverConfig, @@ -600,17 +623,22 @@ impl VmDriver { let sandbox_id = sandbox.id.clone(); let image_ref_for_task = image_ref.clone(); let state_dir_for_task = state_dir.clone(); - let task = tokio::spawn(async move { - driver - .provision_sandbox( - sandbox_for_task, - image_ref_for_task, - state_dir_for_task, - tls_paths, - OverlayPreparation::Fresh, - ) - .await; - }); + let parent = tracing::Span::current().context(); + let provisioning_span = provisioning_span(&parent, &sandbox_id, &image_ref); + let task = tokio::spawn( + async move { + driver + .provision_sandbox( + sandbox_for_task, + image_ref_for_task, + state_dir_for_task, + tls_paths, + OverlayPreparation::Fresh, + ) + .await; + } + .instrument(provisioning_span), + ); let mut registry = self.registry.lock().await; if let Some(record) = registry.get_mut(&sandbox_id) { @@ -645,6 +673,7 @@ impl VmDriver { ) .await { + tracing::Span::current().record("otel.status_code", "ERROR"); if err.code() == tonic::Code::Cancelled { if overlay_preparation == OverlayPreparation::Fresh { let _ = tokio::fs::remove_dir_all(&state_dir).await; @@ -942,7 +971,7 @@ impl VmDriver { console_output = %console_output.display(), "vm driver: spawning VM launcher" ); - let child = match command.spawn() { + let child = match spawn_vm_launcher(&mut command, &sandbox.id, &plan.backend) { Ok(child) => child, Err(err) => { warn!( @@ -983,7 +1012,6 @@ impl VmDriver { record.process = Some(process.clone()); record.gpu_bdf.clone_from(&gpu_bdf); record.qemu_network_allocated = plan.backend == VmBackend::Qemu; - record.provisioning_task = None; snapshot_to_publish = Some(record.snapshot.clone()); } _ => { @@ -1029,11 +1057,22 @@ impl VmDriver { Ok(()) } + #[tracing::instrument( + name = "vm.delete", + skip(self), + fields( + otel.name = "vm.delete", + otel.status_code = tracing::field::Empty, + sandbox.id = %sandbox_id, + sandbox.name = %sandbox_name, + ) + )] pub async fn delete_sandbox( &self, sandbox_id: &str, sandbox_name: &str, ) -> Result { + let span_status = openshell_otel::ErrorStatusGuard::current(); if !sandbox_id.is_empty() { validate_sandbox_id(sandbox_id)?; } @@ -1051,7 +1090,7 @@ impl VmDriver { }; let Some(record_id) = record_id else { - return Ok(DeleteSandboxResponse { deleted: false }); + return span_status.finish(Ok(DeleteSandboxResponse { deleted: false })); }; let ( @@ -1064,7 +1103,7 @@ impl VmDriver { ) = { let mut registry = self.registry.lock().await; let Some(record) = registry.get_mut(&record_id) else { - return Ok(DeleteSandboxResponse { deleted: false }); + return span_status.finish(Ok(DeleteSandboxResponse { deleted: false })); }; record.deleting = true; ( @@ -1110,7 +1149,7 @@ impl VmDriver { } self.publish_deleted(record_id); - Ok(DeleteSandboxResponse { deleted: true }) + span_status.finish(Ok(DeleteSandboxResponse { deleted: true })) } pub async fn get_sandbox( @@ -1146,6 +1185,14 @@ impl VmDriver { snapshots } + #[tracing::instrument( + name = "reconcile", + skip_all, + fields( + otel.name = "reconcile.sandboxes", + driver.name = "vm", + ) + )] async fn restore_persisted_sandboxes(&self) { let state_root = sandboxes_root_dir(&self.config.state_dir); let mut entries = match tokio::fs::read_dir(&state_root).await { @@ -1216,11 +1263,17 @@ impl VmDriver { continue; } - self.restore_persisted_sandbox(sandbox, state_dir).await; + self.restore_persisted_sandbox(sandbox, state_dir, &tracing::Span::current()) + .await; } } - async fn restore_persisted_sandbox(&self, sandbox: Sandbox, state_dir: PathBuf) { + async fn restore_persisted_sandbox( + &self, + sandbox: Sandbox, + state_dir: PathBuf, + reconciliation_span: &tracing::Span, + ) { let Some(image_ref) = self.resolved_sandbox_image(&sandbox) else { warn!( sandbox_id = %sandbox.id, @@ -1301,17 +1354,32 @@ impl VmDriver { let driver = self.clone(); let sandbox_id = sandbox.id.clone(); - let task = tokio::spawn(async move { - driver - .provision_sandbox( - sandbox, - image_ref, - state_dir, - tls_paths, - OverlayPreparation::PreserveExisting, - ) - .await; - }); + let restoration_span = tracing::info_span!( + parent: reconciliation_span, + "vm.restore", + otel.name = "vm.restore", + otel.status_code = tracing::field::Empty, + sandbox.id = %sandbox_id, + ); + let reconciliation_span = reconciliation_span.clone(); + let provisioning_span = + provisioning_span(&restoration_span.context(), &sandbox_id, &image_ref); + let task = tokio::spawn( + async move { + driver + .provision_sandbox( + sandbox, + image_ref, + state_dir, + tls_paths, + OverlayPreparation::PreserveExisting, + ) + .await; + drop(reconciliation_span); + } + .instrument(provisioning_span) + .instrument(restoration_span), + ); let mut registry = self.registry.lock().await; if let Some(record) = registry.get_mut(&sandbox_id) { @@ -1605,6 +1673,21 @@ impl VmDriver { } } + #[cfg(test)] + async fn wait_for_provisioning_for_test(&self, sandbox_id: &str) { + let task = self + .registry + .lock() + .await + .get_mut(sandbox_id) + .and_then(|record| record.provisioning_task.take()) + .unwrap_or_else(|| panic!("provisioning task for {sandbox_id}")); + tokio::time::timeout(Duration::from_secs(5), task) + .await + .unwrap_or_else(|_| panic!("provisioning task for {sandbox_id} timed out")) + .unwrap_or_else(|err| panic!("provisioning task for {sandbox_id} failed: {err}")); + } + async fn assign_gpu_to_record( &self, sandbox_id: &str, @@ -1658,7 +1741,6 @@ impl VmDriver { return; } record.process = None; - record.provisioning_task = None; record.gpu_bdf = None; record.qemu_network_allocated = false; record.snapshot.status = Some(status_with_condition( @@ -1686,11 +1768,22 @@ impl VmDriver { } } + #[tracing::instrument( + name = "vm.prepare_images", + skip(self), + fields( + otel.name = "vm.prepare_images", + otel.status_code = tracing::field::Empty, + sandbox.id = %sandbox_id, + image.ref = %image_ref, + ) + )] async fn prepare_runtime_images( &self, sandbox_id: &str, image_ref: &str, ) -> Result { + let span_status = openshell_otel::ErrorStatusGuard::current(); let bootstrap_image_ref = self.bootstrap_image_ref(image_ref); let bootstrap_image_identity = self .ensure_cached_bootstrap_rootfs_image(sandbox_id, &bootstrap_image_ref) @@ -1698,23 +1791,23 @@ impl VmDriver { let root_disk = image_cache_rootfs_image(&self.config.state_dir, &bootstrap_image_identity); if image_ref.trim() == bootstrap_image_ref.trim() { - return Ok(RuntimeImagePlan { + return span_status.finish(Ok(RuntimeImagePlan { root_disk, image_disk: None, image_identity: bootstrap_image_identity.clone(), bootstrap_image_identity, - }); + })); } let prepared = self .ensure_prepared_image_disk(sandbox_id, image_ref, &root_disk) .await?; - Ok(RuntimeImagePlan { + span_status.finish(Ok(RuntimeImagePlan { root_disk, image_disk: Some(prepared.disk_path), image_identity: prepared.image_identity, bootstrap_image_identity, - }) + })) } fn bootstrap_image_ref(&self, sandbox_image_ref: &str) -> String { @@ -1729,6 +1822,16 @@ impl VmDriver { sandbox_image_ref.to_string() } + #[tracing::instrument( + name = "vm.prepare_overlay", + skip_all, + fields( + otel.name = "vm.prepare_overlay", + otel.status_code = tracing::field::Empty, + overlay.path = %overlay_disk.display(), + preparation = ?preparation, + ) + )] async fn prepare_runtime_overlay( &self, overlay_disk: &Path, @@ -1736,6 +1839,7 @@ impl VmDriver { sandbox_token: Option<&str>, preparation: OverlayPreparation, ) -> Result<(), String> { + let span_status = openshell_otel::ErrorStatusGuard::current(); let tls_materials = match tls_paths { Some(paths) => Some(read_guest_tls_materials(paths).await?), None => None, @@ -1764,7 +1868,7 @@ impl VmDriver { .map_err(|err| format!("overlay template preparation panicked: {err}"))??; } - tokio::task::spawn_blocking(move || { + let result = tokio::task::spawn_blocking(move || { prepare_sandbox_overlay_image( &template_path, &overlay_disk, @@ -1775,7 +1879,8 @@ impl VmDriver { ) }) .await - .map_err(|err| format!("overlay image preparation panicked: {err}"))? + .map_err(|err| format!("overlay image preparation panicked: {err}"))?; + span_status.finish(result) } fn resolved_sandbox_image(&self, sandbox: &Sandbox) -> Option { @@ -1787,15 +1892,26 @@ impl VmDriver { }) } + #[tracing::instrument( + name = "vm.resolve_bootstrap_image", + skip(self), + fields( + otel.name = "vm.resolve_bootstrap_image", + otel.status_code = tracing::field::Empty, + sandbox.id = %sandbox_id, + image.ref = %image_ref, + ) + )] async fn ensure_cached_bootstrap_rootfs_image( &self, sandbox_id: &str, image_ref: &str, ) -> Result { + let span_status = openshell_otel::ErrorStatusGuard::current(); if let Some((engine, image_identity)) = self.resolve_local_container_image(image_ref).await? { - return self + let result = self .ensure_cached_local_image_rootfs_image( sandbox_id, image_ref, @@ -1803,6 +1919,7 @@ impl VmDriver { &image_identity, ) .await; + return span_status.finish(result); } info!(image_ref = %image_ref, "vm driver: ensuring cached root disk image (registry)"); @@ -1884,7 +2001,7 @@ impl VmDriver { ); self.publish_pulled_event(sandbox_id, image_ref, &image_path) .await; - return Ok(image_identity); + return span_status.finish(Ok(image_identity)); } info!( @@ -1934,7 +2051,7 @@ impl VmDriver { ); self.publish_pulled_event(sandbox_id, image_ref, &image_path) .await; - return Ok(image_identity); + return span_status.finish(Ok(image_identity)); } self.build_cached_registry_image_rootfs_image( @@ -1948,7 +2065,7 @@ impl VmDriver { .await?; self.publish_pulled_event(sandbox_id, image_ref, &image_path) .await; - Ok(image_identity) + span_status.finish(Ok(image_identity)) } async fn resolve_local_container_image( @@ -3109,7 +3226,11 @@ impl ComputeDriver for VmDriver { } loop { - match rx.recv().await { + let event = tokio::select! { + () = tx.closed() => return, + event = rx.recv() => event, + }; + match event { Ok(event) => { if let Some(watch_sandboxes_event::Payload::Sandbox(sandbox_event)) = &event.payload @@ -3128,7 +3249,8 @@ impl ComputeDriver for VmDriver { } }); - Ok(Response::new(Box::pin(ReceiverStream::new(out_rx)))) + let stream: Self::WatchSandboxesStream = Box::pin(ReceiverStream::new(out_rx)); + Ok(Response::new(stream)) } } @@ -4677,10 +4799,21 @@ fn inject_guest_sandbox_token(overlay_disk: &Path, token: &str) -> Result<(), St } #[allow(clippy::result_large_err)] +#[tracing::instrument( + name = "vm.prepare_guest", + skip(dropins), + fields( + otel.name = "vm.prepare_guest", + otel.status_code = tracing::field::Empty, + overlay.path = %overlay_disk.display(), + dropin.count = dropins.len(), + ) +)] fn inject_guest_init_dropins( overlay_disk: &Path, dropins: &[GuestInitDropin], ) -> Result<(), Status> { + let span_status = openshell_otel::ErrorStatusGuard::current(); validate_guest_init_dropins(dropins).map_err(Status::failed_precondition)?; // Drop-ins are *executed* in a child shell by run_openshell_init_dropins @@ -4709,7 +4842,7 @@ fn inject_guest_init_dropins( // explicitly injected this launch are eligible to run, and a guest // image cannot smuggle in extra `init.d` entries. write_guest_init_dropin_manifest(overlay_disk, dropins)?; - Ok(()) + span_status.finish(Ok(())) } /// Render the drop-in allow-list as newline-separated, ASCII-sorted, @@ -4979,6 +5112,24 @@ async fn terminate_vm_process(child: &mut Child) -> Result<(), std::io::Error> { } } +#[tracing::instrument( + name = "vm.launch", + skip(command), + fields( + otel.name = "vm.launch", + otel.status_code = tracing::field::Empty, + sandbox.id = %sandbox_id, + vm.backend = ?backend, + ) +)] +fn spawn_vm_launcher( + command: &mut Command, + sandbox_id: &str, + backend: &VmBackend, +) -> Result { + openshell_otel::record_error_result(command.spawn()) +} + fn sandbox_snapshot(sandbox: &Sandbox, condition: SandboxCondition, deleting: bool) -> Sandbox { Sandbox { id: sandbox.id.clone(), @@ -5161,6 +5312,548 @@ mod tests { static ENV_LOCK: std::sync::LazyLock> = std::sync::LazyLock::new(|| std::sync::Mutex::new(())); + struct TestTracing { + exporter: opentelemetry_sdk::trace::InMemorySpanExporter, + _provider: opentelemetry_sdk::trace::SdkTracerProvider, + dispatch: tracing::Dispatch, + } + + impl TestTracing { + fn new() -> Self { + use opentelemetry::trace::TracerProvider as _; + use tracing_subscriber::layer::SubscriberExt as _; + + let exporter = opentelemetry_sdk::trace::InMemorySpanExporterBuilder::new().build(); + let provider = opentelemetry_sdk::trace::SdkTracerProvider::builder() + .with_simple_exporter(exporter.clone()) + .build(); + let subscriber = tracing_subscriber::registry().with( + tracing_opentelemetry::layer().with_tracer(provider.tracer("vm-driver-test")), + ); + Self { + exporter, + _provider: provider, + dispatch: tracing::Dispatch::new(subscriber), + } + } + } + + fn assert_is_root(span: &opentelemetry_sdk::trace::SpanData) { + assert_eq!( + span.parent_span_id, + opentelemetry::trace::SpanId::INVALID, + "{:?} should be a trace root", + span.name + ); + } + + fn assert_has_parent(span: &opentelemetry_sdk::trace::SpanData) { + assert_ne!( + span.parent_span_id, + opentelemetry::trace::SpanId::INVALID, + "{:?} should have a parent", + span.name + ); + } + + fn request_with_traceparent(message: T) -> Request { + let mut request = Request::new(message); + request.metadata_mut().insert( + "traceparent", + "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" + .parse() + .unwrap(), + ); + request + } + + type TestDriverClient = + openshell_core::proto::compute::v1::compute_driver_client::ComputeDriverClient< + tonic::transport::Channel, + >; + + struct TracedDriverClient { + client: TestDriverClient, + shutdown: tokio::sync::oneshot::Sender<()>, + server: JoinHandle>, + } + + impl std::ops::Deref for TracedDriverClient { + type Target = TestDriverClient; + + fn deref(&self) -> &Self::Target { + &self.client + } + } + + impl std::ops::DerefMut for TracedDriverClient { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.client + } + } + + impl TracedDriverClient { + async fn shutdown(self) { + let Self { + client, + shutdown, + server, + } = self; + drop(client); + let _ = shutdown.send(()); + tokio::time::timeout(Duration::from_secs(5), server) + .await + .expect("traced driver test server should stop") + .expect("traced driver test server task should not panic") + .expect("traced driver test server should stop cleanly"); + } + } + + async fn traced_driver_client(driver: VmDriver) -> TracedDriverClient { + use openshell_core::proto::compute::v1::compute_driver_server::ComputeDriverServer; + + let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); + let address = listener.local_addr().unwrap(); + let (shutdown, shutdown_rx) = tokio::sync::oneshot::channel(); + let server = tokio::spawn(async move { + tonic::transport::Server::builder() + .layer(crate::otel_tracing::compute_driver_rpc_layer()) + .add_service(ComputeDriverServer::new(driver)) + .serve_with_incoming_shutdown( + tokio_stream::wrappers::TcpListenerStream::new(listener), + async { + let _ = shutdown_rx.await; + }, + ) + .await + }); + + let client = TestDriverClient::connect(format!("http://{address}")) + .await + .unwrap(); + TracedDriverClient { + client, + shutdown, + server, + } + } + + #[tokio::test] + async fn compute_driver_rpc_span_continues_the_gateway_trace() { + let traced = TestTracing::new(); + let _dispatch = tracing::dispatcher::set_default(&traced.dispatch); + let driver = test_driver_with_extensions(LifecycleExtensionRegistry::new()); + let mut client = traced_driver_client(driver).await; + + client + .get_capabilities(request_with_traceparent(GetCapabilitiesRequest {})) + .await + .unwrap(); + client.shutdown().await; + + let spans = traced.exporter.get_finished_spans().unwrap(); + let rpc_spans = spans + .iter() + .filter(|span| span.name == "driver.get_capabilities") + .collect::>(); + assert_eq!( + rpc_spans.len(), + 1, + "middleware should create exactly one VM driver RPC span, got {:?}", + spans.iter().map(|span| &span.name).collect::>() + ); + let span = rpc_spans[0]; + assert_eq!( + span.span_context.trace_id().to_string(), + "4bf92f3577b34da6a3ce929d0e0e4736" + ); + assert_eq!(span.parent_span_id.to_string(), "00f067aa0ba902b7"); + } + + #[tokio::test] + async fn compute_driver_rpcs_record_server_spans_and_error_status() { + let traced = TestTracing::new(); + let _dispatch = tracing::dispatcher::set_default(&traced.dispatch); + let driver = test_driver_with_extensions(LifecycleExtensionRegistry::new()); + let mut client = traced_driver_client(driver).await; + + client + .get_capabilities(request_with_traceparent(GetCapabilitiesRequest {})) + .await + .unwrap(); + assert!( + client + .validate_sandbox_create(request_with_traceparent(ValidateSandboxCreateRequest { + sandbox: None, + })) + .await + .is_err() + ); + assert!( + client + .create_sandbox(request_with_traceparent(CreateSandboxRequest { + sandbox: None, + })) + .await + .is_err() + ); + assert!( + client + .get_sandbox(request_with_traceparent(GetSandboxRequest { + sandbox_id: String::new(), + sandbox_name: String::new(), + })) + .await + .is_err() + ); + client + .list_sandboxes(request_with_traceparent(ListSandboxesRequest {})) + .await + .unwrap(); + assert!( + client + .stop_sandbox(request_with_traceparent(StopSandboxRequest { + sandbox_id: String::new(), + sandbox_name: String::new(), + })) + .await + .is_err() + ); + client + .delete_sandbox(request_with_traceparent(DeleteSandboxRequest { + sandbox_id: String::new(), + sandbox_name: String::new(), + })) + .await + .unwrap(); + let watch = client + .watch_sandboxes(request_with_traceparent(WatchSandboxesRequest {})) + .await + .unwrap(); + drop(watch); + client.shutdown().await; + + let spans = traced.exporter.get_finished_spans().unwrap(); + let expected = [ + "driver.get_capabilities", + "driver.validate_sandbox_create", + "driver.create_sandbox", + "driver.get_sandbox", + "driver.list_sandboxes", + "driver.stop_sandbox", + "driver.delete_sandbox", + "driver.watch_sandboxes", + ]; + for name in expected { + let span = spans + .iter() + .find(|span| span.name == name) + .unwrap_or_else(|| panic!("missing {name} span")); + assert_eq!(span.span_kind, opentelemetry::trace::SpanKind::Server); + assert_has_parent(span); + } + for name in [ + "driver.validate_sandbox_create", + "driver.create_sandbox", + "driver.get_sandbox", + "driver.stop_sandbox", + ] { + let span = spans.iter().find(|span| span.name == name).unwrap(); + assert!( + matches!(span.status, opentelemetry::trace::Status::Error { .. }), + "{name} should record an error status, got {:?}", + span.status + ); + } + let delete_rpc = spans + .iter() + .find(|span| span.name == "driver.delete_sandbox") + .expect("delete RPC span"); + let cleanup = spans + .iter() + .find(|span| { + span.name == "vm.delete" + && span.span_context.trace_id() == delete_rpc.span_context.trace_id() + }) + .expect("delete cleanup span"); + assert_has_parent(cleanup); + } + + #[tokio::test] + async fn spawned_provisioning_and_phases_have_parents() { + let traced = TestTracing::new(); + let _dispatch = tracing::dispatcher::set_default(&traced.dispatch); + let temp = tempfile::tempdir().unwrap(); + let mut driver = test_driver_with_extensions(LifecycleExtensionRegistry::new()); + driver.config.state_dir = temp.path().to_path_buf(); + let sandbox = Sandbox { + id: "sb-spawned-trace".to_string(), + name: "spawned-trace".to_string(), + spec: Some(SandboxSpec { + template: Some(SandboxTemplate { + image: "invalid image reference".to_string(), + ..Default::default() + }), + ..Default::default() + }), + ..Default::default() + }; + let request = request_with_traceparent(CreateSandboxRequest { + sandbox: Some(sandbox), + }); + + let mut client = traced_driver_client(driver.clone()).await; + client.create_sandbox(request).await.unwrap(); + driver + .wait_for_provisioning_for_test("sb-spawned-trace") + .await; + client.shutdown().await; + + let spans = traced.exporter.get_finished_spans().unwrap(); + let provisioning = spans + .iter() + .find(|span| span.name == "vm.provision") + .expect("spawned provisioning span"); + assert_has_parent(provisioning); + let prepare_images = spans + .iter() + .find(|span| span.name == "vm.prepare_images") + .expect("image preparation span"); + assert_has_parent(prepare_images); + let resolve_bootstrap = spans + .iter() + .find(|span| span.name == "vm.resolve_bootstrap_image") + .expect("bootstrap image resolution span"); + assert_has_parent(resolve_bootstrap); + } + + #[tokio::test] + async fn startup_reconciliation_is_root_and_restore_operations_have_parents() { + let traced = TestTracing::new(); + let _dispatch = tracing::dispatcher::set_default(&traced.dispatch); + let temp = tempfile::tempdir().unwrap(); + let mut driver = test_driver_with_extensions(LifecycleExtensionRegistry::new()); + driver.config.state_dir = temp.path().to_path_buf(); + for suffix in ["a", "b"] { + let sandbox = Sandbox { + id: format!("sb-restored-trace-{suffix}"), + name: format!("restored-trace-{suffix}"), + spec: Some(SandboxSpec { + template: Some(SandboxTemplate { + image: "invalid image reference".to_string(), + ..Default::default() + }), + ..Default::default() + }), + ..Default::default() + }; + let state_dir = temp.path().join("sandboxes").join(&sandbox.id); + tokio::fs::create_dir_all(&state_dir).await.unwrap(); + write_sandbox_request(&state_dir, &sandbox).await.unwrap(); + } + + driver.restore_persisted_sandboxes().await; + for suffix in ["a", "b"] { + driver + .wait_for_provisioning_for_test(&format!("sb-restored-trace-{suffix}")) + .await; + } + + let spans = traced.exporter.get_finished_spans().unwrap(); + + let reconciliations = spans + .iter() + .filter(|span| span.name == "reconcile.sandboxes") + .collect::>(); + assert_eq!( + reconciliations.len(), + 1, + "startup should reconcile all persisted sandboxes in one trace" + ); + let reconciliation = reconciliations[0]; + assert_is_root(reconciliation); + let restorations = spans + .iter() + .filter(|span| span.name == "vm.restore") + .collect::>(); + assert_eq!(restorations.len(), 2); + for restoration in restorations { + assert_has_parent(restoration); + } + let provisioning = spans + .iter() + .filter(|span| span.name == "vm.provision") + .collect::>(); + assert_eq!(provisioning.len(), 2); + for span in provisioning { + assert_has_parent(span); + } + let prepare_images = spans + .iter() + .filter(|span| span.name == "vm.prepare_images") + .collect::>(); + assert_eq!(prepare_images.len(), 2); + for span in prepare_images { + assert_has_parent(span); + } + } + + #[tokio::test] + async fn background_provisioning_does_not_extend_the_rpc_span_lifetime() { + let traced = TestTracing::new(); + let _dispatch = tracing::dispatcher::set_default(&traced.dispatch); + let rpc = tracing::info_span!("driver.create_sandbox"); + let entered = rpc.enter(); + let provisioning = + provisioning_span(&rpc.context(), "sb-lifetime", "invalid image reference"); + drop(entered); + drop(rpc); + + assert!( + traced + .exporter + .get_finished_spans() + .unwrap() + .iter() + .any(|span| span.name == "driver.create_sandbox"), + "the RPC span should finish while background provisioning is still active" + ); + drop(provisioning); + } + + #[tokio::test] + async fn overlay_preparation_records_a_provisioning_phase_span() { + let traced = TestTracing::new(); + let _dispatch = tracing::dispatcher::set_default(&traced.dispatch); + let mut driver = test_driver_with_extensions(LifecycleExtensionRegistry::new()); + driver.config.overlay_disk_mib = u64::MAX; + let parent = tracing::info_span!("vm.provision"); + + let result = driver + .prepare_runtime_overlay(Path::new("/unused"), None, None, OverlayPreparation::Fresh) + .instrument(parent) + .await; + assert!(result.is_err(), "overflow should stop before disk I/O"); + + let spans = traced.exporter.get_finished_spans().unwrap(); + let overlay = spans + .iter() + .find(|span| span.name == "vm.prepare_overlay") + .expect("overlay preparation span"); + assert_has_parent(overlay); + assert!( + matches!(overlay.status, opentelemetry::trace::Status::Error { .. }), + "failed overlay preparation should mark its phase span, got {:?}", + overlay.status + ); + } + + #[tokio::test] + async fn post_overlay_provisioning_stages_record_child_spans() { + let traced = TestTracing::new(); + let _dispatch = tracing::dispatcher::set_default(&traced.dispatch); + let driver = test_driver_with_extensions(LifecycleExtensionRegistry::with(vec![Arc::new( + AlwaysFailsExtension, + )])); + let sandbox = Sandbox { + id: "sb-post-overlay".to_string(), + ..Default::default() + }; + let mut plan = driver + .build_vm_launch_plan(&sandbox.id, false, false, None) + .unwrap(); + let provisioning = tracing::info_span!("vm.provision"); + + async { + driver + .lifecycle_extensions + .configure_launch(&sandbox, Path::new("/unused"), &mut plan) + .await + .unwrap(); + let before_launch = driver + .lifecycle_extensions + .before_launch(&sandbox, Path::new("/unused"), &mut plan) + .await; + assert!( + before_launch.is_err(), + "the lifecycle hook should reject launch" + ); + let invalid_dropin = GuestInitDropin::new("../invalid", Vec::new()); + assert!( + inject_guest_init_dropins(Path::new("/unused"), &[invalid_dropin]).is_err(), + "an invalid drop-in should fail after creating its span" + ); + } + .instrument(provisioning) + .await; + + let spans = traced.exporter.get_finished_spans().unwrap(); + for name in [ + "vm.configure_launch", + "vm.before_launch", + "vm.prepare_guest", + ] { + let span = spans + .iter() + .find(|span| span.name == name) + .unwrap_or_else(|| panic!("missing {name} span")); + assert_has_parent(span); + } + for name in ["vm.before_launch", "vm.prepare_guest"] { + let span = spans.iter().find(|span| span.name == name).unwrap(); + assert!( + matches!(span.status, opentelemetry::trace::Status::Error { .. }), + "{name} should record an error status, got {:?}", + span.status + ); + } + } + + #[tokio::test] + async fn launcher_spawn_failure_records_a_failed_provisioning_phase_span() { + let traced = TestTracing::new(); + let _dispatch = tracing::dispatcher::set_default(&traced.dispatch); + let provisioning = tracing::info_span!("vm.provision"); + let mut command = Command::new("/openshell-test/nonexistent-vm-launcher"); + + let result = + async { spawn_vm_launcher(&mut command, "sb-launch-trace", &VmBackend::Libkrun) } + .instrument(provisioning) + .await; + assert!(result.is_err(), "the nonexistent launcher should fail"); + + let spans = traced.exporter.get_finished_spans().unwrap(); + let launch = spans + .iter() + .find(|span| span.name == "vm.launch") + .expect("launcher span"); + assert_has_parent(launch); + assert!( + matches!(launch.status, opentelemetry::trace::Status::Error { .. }), + "failed launcher spawn should mark its phase span, got {:?}", + launch.status + ); + } + + #[tokio::test] + async fn delete_failure_marks_the_delete_span() { + let traced = TestTracing::new(); + let _dispatch = tracing::dispatcher::set_default(&traced.dispatch); + let driver = test_driver_with_extensions(LifecycleExtensionRegistry::new()); + + assert!(driver.delete_sandbox("../invalid", "").await.is_err()); + + let spans = traced.exporter.get_finished_spans().unwrap(); + let deletion = spans + .iter() + .find(|span| span.name == "vm.delete") + .expect("delete span"); + assert!( + matches!(deletion.status, opentelemetry::trace::Status::Error { .. }), + "failed deletion should mark its span, got {:?}", + deletion.status + ); + } fn gpu_device_ids_config(device_ids: &[&str]) -> Struct { list_string_driver_config("gpu_device_ids", device_ids) diff --git a/crates/openshell-driver-vm/src/lib.rs b/crates/openshell-driver-vm/src/lib.rs index 88e2c3b201..98ba6b0c9a 100644 --- a/crates/openshell-driver-vm/src/lib.rs +++ b/crates/openshell-driver-vm/src/lib.rs @@ -7,6 +7,7 @@ mod ffi; pub mod gpu; pub mod lifecycle; mod nft_ruleset; +pub mod otel_tracing; pub mod procguard; mod rootfs; mod runtime; diff --git a/crates/openshell-driver-vm/src/lifecycle.rs b/crates/openshell-driver-vm/src/lifecycle.rs index c042715e58..646070c3a1 100644 --- a/crates/openshell-driver-vm/src/lifecycle.rs +++ b/crates/openshell-driver-vm/src/lifecycle.rs @@ -550,12 +550,22 @@ impl LifecycleExtensionRegistry { .collect() } + #[tracing::instrument( + name = "vm.configure_launch", + skip_all, + fields( + otel.name = "vm.configure_launch", + otel.status_code = tracing::field::Empty, + sandbox.id = %sandbox.id, + ) + )] pub async fn configure_launch( &self, sandbox: &Sandbox, state_dir: &Path, plan: &mut LaunchPlan, ) -> LifecycleResult<()> { + let span_status = openshell_otel::ErrorStatusGuard::current(); for ext in self.active_for(sandbox) { let descriptor = ext.descriptor(); for backend in descriptor.required_backends { @@ -585,19 +595,29 @@ impl LifecycleExtensionRegistry { .map(|p| p.display().to_string()), ); } - Ok(()) + span_status.finish(Ok(())) } + #[tracing::instrument( + name = "vm.before_launch", + skip_all, + fields( + otel.name = "vm.before_launch", + otel.status_code = tracing::field::Empty, + sandbox.id = %sandbox.id, + ) + )] pub async fn before_launch( &self, sandbox: &Sandbox, state_dir: &Path, plan: &mut LaunchPlan, ) -> LifecycleResult<()> { + let span_status = openshell_otel::ErrorStatusGuard::current(); for ext in self.active_for(sandbox) { ext.before_launch(sandbox, state_dir, plan).await?; } - Ok(()) + span_status.finish(Ok(())) } pub async fn after_launch_failed( diff --git a/crates/openshell-driver-vm/src/main.rs b/crates/openshell-driver-vm/src/main.rs index 0ae694effa..949d4ce05c 100644 --- a/crates/openshell-driver-vm/src/main.rs +++ b/crates/openshell-driver-vm/src/main.rs @@ -6,6 +6,7 @@ use futures::Stream; use miette::{IntoDiagnostic, Result}; use openshell_core::VERSION; use openshell_core::proto::compute::v1::compute_driver_server::ComputeDriverServer; +use openshell_driver_vm::otel_tracing::compute_driver_rpc_layer; #[cfg(target_os = "macos")] use openshell_driver_vm::{VM_RUNTIME_DIR_ENV, configured_runtime_dir}; use openshell_driver_vm::{VmBackend, VmDriver, VmDriverConfig, VmLaunchConfig, procguard, run_vm}; @@ -18,6 +19,7 @@ use std::task::{Context, Poll}; use tokio::net::{UnixListener, UnixStream}; use tracing::info; use tracing_subscriber::EnvFilter; +use tracing_subscriber::prelude::*; #[derive(Parser, Debug)] #[command(name = "openshell-driver-vm")] @@ -86,6 +88,9 @@ struct Args { #[arg(long, env = "OPENSHELL_LOG_LEVEL", default_value = "info")] log_level: String, + #[arg(long, env = "OPENSHELL_OTLP_ENDPOINT")] + otlp_endpoint: Option, + #[arg(long, env = "OPENSHELL_GRPC_ENDPOINT")] openshell_endpoint: Option, @@ -181,11 +186,22 @@ async fn main() -> Result<()> { return Ok(()); } - tracing_subscriber::fmt() - .with_env_filter( - EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(&args.log_level)), + let (tracer_provider, setup_error) = + openshell_driver_vm::otel_tracing::provider_for(args.otlp_endpoint.as_deref()); + tracing_subscriber::registry() + .with(EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(&args.log_level))) + .with(tracing_subscriber::fmt::layer()) + .with( + tracer_provider + .as_ref() + .map(openshell_driver_vm::otel_tracing::layer), ) .init(); + if let Some(error) = setup_error { + tracing::error!(%error, "OTLP exporting could not be started"); + } else if let Some(endpoint) = &args.otlp_endpoint { + info!(endpoint, "OTLP exporting enabled"); + } let listen_mode = compute_driver_listen_mode(&args).map_err(|err| miette::miette!("{err}"))?; @@ -226,7 +242,7 @@ async fn main() -> Result<()> { .await .map_err(|err| miette::miette!("{err}"))?; - match listen_mode { + let result = match listen_mode { ComputeDriverListenMode::Unix { socket_path, expected_peer_pid, @@ -237,8 +253,12 @@ async fn main() -> Result<()> { let listener = UnixListener::bind(&socket_path).into_diagnostic()?; restrict_socket_permissions(&socket_path).map_err(|err| miette::miette!("{err}"))?; let result = tonic::transport::Server::builder() + .layer(compute_driver_rpc_layer()) .add_service(ComputeDriverServer::new(driver)) - .serve_with_incoming(AuthenticatedUnixIncoming::new(listener, expected_peer_pid)) + .serve_with_incoming_shutdown( + AuthenticatedUnixIncoming::new(listener, expected_peer_pid), + shutdown_signal(), + ) .await .into_diagnostic(); let _ = std::fs::remove_file(&socket_path); @@ -247,12 +267,33 @@ async fn main() -> Result<()> { ComputeDriverListenMode::Tcp(bind_address) => { info!(address = %bind_address, "Starting unauthenticated dev vm compute driver"); tonic::transport::Server::builder() + .layer(compute_driver_rpc_layer()) .add_service(ComputeDriverServer::new(driver)) - .serve(bind_address) + .serve_with_shutdown(bind_address, shutdown_signal()) .await .into_diagnostic() } + }; + if let Some(provider) = &tracer_provider + && let Err(error) = provider.shutdown() + { + tracing::warn!(%error, "OTLP tracer provider shutdown failed"); + } + result +} + +async fn shutdown_signal() { + let mut terminate = tokio::signal::unix::signal(tokio::signal::unix::SignalKind::terminate()) + .expect("install SIGTERM handler"); + tokio::select! { + result = tokio::signal::ctrl_c() => { + if let Err(error) = result { + tracing::warn!(%error, "failed to listen for Ctrl-C"); + } + } + _ = terminate.recv() => {} } + info!("Shutdown signal received; stopping vm compute driver"); } #[derive(Debug, Clone, PartialEq, Eq)] @@ -649,6 +690,19 @@ mod tests { assert!(err.contains("--bind-socket is required")); } + #[test] + fn accepts_gateway_otlp_endpoint() { + let args = Args::try_parse_from([ + "openshell-driver-vm", + "--otlp-endpoint", + "http://127.0.0.1:4317", + ]); + assert!( + args.is_ok(), + "VM driver should accept the gateway OTLP endpoint" + ); + } + #[test] fn listen_mode_rejects_bind_address_without_tcp_opt_in() { let args = Args::parse_from(["openshell-driver-vm", "--bind-address", "127.0.0.1:50061"]); diff --git a/crates/openshell-driver-vm/src/otel_tracing.rs b/crates/openshell-driver-vm/src/otel_tracing.rs new file mode 100644 index 0000000000..fac2720cd7 --- /dev/null +++ b/crates/openshell-driver-vm/src/otel_tracing.rs @@ -0,0 +1,267 @@ +// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! OpenTelemetry trace exporting. + +use http::Request; +use openshell_otel::{ + HeaderMapExtractor, OtlpTraceConfig, RecordGrpcFailure, SdkTracerProvider, ServiceName, + SetupError, +}; +use opentelemetry::propagation::TextMapPropagator; +use opentelemetry::trace::TraceContextExt as _; +use opentelemetry_sdk::propagation::TraceContextPropagator; +use tower_http::trace::{GrpcMakeClassifier, MakeSpan, TraceLayer}; +use tracing::{Span, Subscriber}; +use tracing_opentelemetry::OpenTelemetrySpanExt as _; +use tracing_subscriber::registry::LookupSpan; + +const SERVICE_NAME: &str = "openshell-driver-vm"; +const INSTRUMENTATION_SCOPE: &str = "openshell-driver-vm"; +const COMPUTE_DRIVER_SERVICE: &str = "openshell.compute.v1.ComputeDriver"; + +/// Trace every inbound compute-driver RPC at the tonic service boundary. +pub fn compute_driver_rpc_layer() +-> TraceLayer { + TraceLayer::new_for_grpc() + .make_span_with(ComputeDriverRpcSpan) + .on_request(()) + .on_response(()) + .on_body_chunk(()) + .on_eos(()) + .on_failure(RecordGrpcFailure) +} + +/// Creates the server span for an inbound compute-driver request. +#[derive(Debug, Clone, Copy)] +pub struct ComputeDriverRpcSpan; + +impl MakeSpan for ComputeDriverRpcSpan { + fn make_span(&mut self, request: &Request) -> Span { + let (operation, method) = compute_driver_rpc_operation(request.uri().path()); + let span = tracing::info_span!( + "driver_rpc", + otel.name = operation, + otel.kind = "server", + otel.status_code = tracing::field::Empty, + rpc.system = "grpc", + rpc.service = COMPUTE_DRIVER_SERVICE, + rpc.method = method, + rpc.grpc.status_code = tracing::field::Empty, + ); + let parent = TraceContextPropagator::new().extract_with_context( + &opentelemetry::Context::new(), + &HeaderMapExtractor::new(request.headers()), + ); + if parent.span().span_context().is_valid() { + let _ = span.set_parent(parent); + } + span + } +} + +fn compute_driver_rpc_operation(path: &str) -> (&'static str, &'static str) { + match path.rsplit('/').next() { + Some("GetCapabilities") => ("driver.get_capabilities", "get_capabilities"), + Some("GetGatewayListenerRequirements") => ( + "driver.get_gateway_listener_requirements", + "get_gateway_listener_requirements", + ), + Some("ValidateSandboxCreate") => { + ("driver.validate_sandbox_create", "validate_sandbox_create") + } + Some("CreateSandbox") => ("driver.create_sandbox", "create_sandbox"), + Some("GetSandbox") => ("driver.get_sandbox", "get_sandbox"), + Some("ListSandboxes") => ("driver.list_sandboxes", "list_sandboxes"), + Some("StopSandbox") => ("driver.stop_sandbox", "stop_sandbox"), + Some("DeleteSandbox") => ("driver.delete_sandbox", "delete_sandbox"), + Some("WatchSandboxes") => ("driver.watch_sandboxes", "watch_sandboxes"), + _ => ("driver.unknown", "unknown"), + } +} + +/// Build a tracer provider for the configured OTLP/gRPC endpoint. +#[must_use] +pub fn provider_for(endpoint: Option<&str>) -> (Option, Option) { + openshell_otel::provider_for(endpoint.map(|endpoint| OtlpTraceConfig { + endpoint, + service_name: ServiceName::Fixed(SERVICE_NAME), + service_version: Some(openshell_core::VERSION), + resource_attributes: Vec::new(), + })) +} + +/// Build the tracing layer that exports VM-driver spans. +pub fn layer(provider: &SdkTracerProvider) -> openshell_otel::OtlpLayer +where + S: Subscriber + for<'span> LookupSpan<'span>, +{ + openshell_otel::layer(provider, INSTRUMENTATION_SCOPE) +} + +#[cfg(test)] +mod tests { + use std::sync::{Arc, Mutex}; + + use opentelemetry_proto::tonic::collector::trace::v1::{ + ExportTraceServiceRequest, ExportTraceServiceResponse, + trace_service_server::{TraceService, TraceServiceServer}, + }; + use opentelemetry_proto::tonic::trace::v1::Span; + use tracing_subscriber::layer::SubscriberExt as _; + + #[derive(Default)] + struct Received { + spans: Vec, + service_names: Vec, + } + + #[derive(Clone)] + struct Collector { + received: Arc>, + exported: Arc, + } + + #[tonic::async_trait] + impl TraceService for Collector { + async fn export( + &self, + request: tonic::Request, + ) -> Result, tonic::Status> { + { + let mut received = self.received.lock().unwrap(); + for resource_span in request.into_inner().resource_spans { + if let Some(resource) = resource_span.resource { + received.service_names.extend( + resource + .attributes + .into_iter() + .filter(|attribute| attribute.key == "service.name") + .filter_map(|attribute| attribute.value) + .filter_map(|value| value.value) + .filter_map(|value| match value { + opentelemetry_proto::tonic::common::v1::any_value::Value::StringValue(value) => Some(value), + _ => None, + }), + ); + } + for scope_span in resource_span.scope_spans { + received.spans.extend(scope_span.spans); + } + } + } + self.exported.notify_one(); + Ok(tonic::Response::new(ExportTraceServiceResponse::default())) + } + } + + #[test] + fn compute_driver_rpc_names_are_explicitly_mapped_and_schema_bounded() { + for (rpc, operation, method) in [ + ( + "GetCapabilities", + "driver.get_capabilities", + "get_capabilities", + ), + ( + "GetGatewayListenerRequirements", + "driver.get_gateway_listener_requirements", + "get_gateway_listener_requirements", + ), + ( + "ValidateSandboxCreate", + "driver.validate_sandbox_create", + "validate_sandbox_create", + ), + ("CreateSandbox", "driver.create_sandbox", "create_sandbox"), + ("GetSandbox", "driver.get_sandbox", "get_sandbox"), + ("ListSandboxes", "driver.list_sandboxes", "list_sandboxes"), + ("StopSandbox", "driver.stop_sandbox", "stop_sandbox"), + ("DeleteSandbox", "driver.delete_sandbox", "delete_sandbox"), + ( + "WatchSandboxes", + "driver.watch_sandboxes", + "watch_sandboxes", + ), + ] { + assert_eq!( + super::compute_driver_rpc_operation(&format!( + "/openshell.compute.v1.ComputeDriver/{rpc}" + )), + (operation, method), + "{rpc} must keep an explicit low-cardinality span identity" + ); + } + assert_eq!( + super::compute_driver_rpc_operation( + "/openshell.compute.v1.ComputeDriver/AttackerControlled12345" + ), + ("driver.unknown", "unknown"), + "paths absent from the protobuf schema must not create span names" + ); + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn vm_driver_spans_reach_otlp_collector_with_distinct_service_name() { + let received = Arc::new(Mutex::new(Received::default())); + let exported = Arc::new(tokio::sync::Notify::new()); + let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); + let address = listener.local_addr().unwrap(); + let collector = Collector { + received: Arc::clone(&received), + exported: Arc::clone(&exported), + }; + let (shutdown_tx, shutdown_rx) = tokio::sync::oneshot::channel(); + let server = tokio::spawn(async move { + tonic::transport::Server::builder() + .add_service(TraceServiceServer::new(collector)) + .serve_with_incoming_shutdown( + tokio_stream::wrappers::TcpListenerStream::new(listener), + async { + let _ = shutdown_rx.await; + }, + ) + .await + }); + + let (provider, error) = super::provider_for(Some(&format!("http://{address}"))); + assert!(error.is_none(), "valid OTLP endpoint should configure"); + let provider = provider.expect("provider"); + let subscriber = tracing_subscriber::registry().with(super::layer(&provider)); + tracing::subscriber::with_default(subscriber, || { + let span = tracing::info_span!("vm.provision", sandbox.id = "sb-otlp"); + drop(span.enter()); + drop(span); + }); + let export_completed = exported.notified(); + provider.force_flush().unwrap(); + tokio::time::timeout(std::time::Duration::from_secs(5), export_completed) + .await + .expect("OTLP export should complete"); + provider.shutdown().unwrap(); + + shutdown_tx + .send(()) + .expect("collector server should be running"); + tokio::time::timeout(std::time::Duration::from_secs(5), server) + .await + .expect("collector server shutdown should not deadlock") + .expect("collector server task should not panic") + .expect("collector server should shut down cleanly"); + + let received = received.lock().unwrap(); + received + .spans + .iter() + .find(|span| span.name == "vm.provision") + .expect("VM span should reach collector"); + assert!( + received + .service_names + .iter() + .any(|name| name == "openshell-driver-vm"), + "VM spans should use a distinct service name, got {:?}", + received.service_names + ); + } +} diff --git a/crates/openshell-otel/Cargo.toml b/crates/openshell-otel/Cargo.toml index bdf42630af..b53a716819 100644 --- a/crates/openshell-otel/Cargo.toml +++ b/crates/openshell-otel/Cargo.toml @@ -19,6 +19,8 @@ thiserror = { workspace = true } tracing = { workspace = true } tracing-opentelemetry = { workspace = true } tracing-subscriber = { workspace = true } +tonic = { workspace = true } +tower-http = { workspace = true } [dev-dependencies] tokio = { workspace = true } diff --git a/crates/openshell-otel/src/grpc.rs b/crates/openshell-otel/src/grpc.rs new file mode 100644 index 0000000000..9eb7caa488 --- /dev/null +++ b/crates/openshell-otel/src/grpc.rs @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! Shared gRPC tracing adapters. + +use tower_http::classify::GrpcFailureClass; +use tower_http::trace::OnFailure; +use tracing::Span; + +/// Records a non-OK gRPC outcome on the request span. +#[derive(Debug, Clone, Copy)] +pub struct RecordGrpcFailure; + +impl OnFailure for RecordGrpcFailure { + fn on_failure( + &mut self, + failure: GrpcFailureClass, + _latency: std::time::Duration, + span: &Span, + ) { + crate::mark_error(span); + if let GrpcFailureClass::Code(code) = failure { + span.record("rpc.grpc.status_code", code.get()); + } + } +} diff --git a/crates/openshell-otel/src/lib.rs b/crates/openshell-otel/src/lib.rs index ae6f503ad7..1536f66f24 100644 --- a/crates/openshell-otel/src/lib.rs +++ b/crates/openshell-otel/src/lib.rs @@ -3,6 +3,12 @@ //! Shared OpenTelemetry trace export support for `OpenShell` services. +mod grpc; +mod propagation; + +pub use grpc::RecordGrpcFailure; +pub use propagation::{HeaderMapExtractor, MetadataMapInjector, TraceContextInterceptor}; + use opentelemetry::KeyValue; use opentelemetry::trace::TracerProvider as _; use opentelemetry_otlp::{SpanExporter, WithExportConfig}; @@ -16,6 +22,57 @@ use tracing_subscriber::registry::LookupSpan; const SDK_UNKNOWN_SERVICE_PREFIX: &str = "unknown_service"; +/// Mark `span` as failed. +/// +/// The field must be declared on the span at creation because `tracing` drops +/// records for fields a span does not have. +pub fn mark_error(span: &tracing::Span) { + span.record("otel.status_code", "ERROR"); +} + +/// Marks the current span when an instrumented operation returns an error. +pub fn record_error_result(result: Result) -> Result { + if result.is_err() { + mark_error(&tracing::Span::current()); + } + result +} + +/// Marks an instrumented function's span when it exits before returning success. +/// +/// Create the guard at the start of the instrumented function and return the +/// successful result through [`Self::finish`]. An early `?` or error return +/// drops the unfinished guard and marks the captured span as failed. +#[must_use] +pub struct ErrorStatusGuard { + span: tracing::Span, + finished: bool, +} + +impl ErrorStatusGuard { + /// Captures the current instrumented span. + pub fn current() -> Self { + Self { + span: tracing::Span::current(), + finished: false, + } + } + + /// Returns `result`, marking this guard complete when it is successful. + pub fn finish(mut self, result: Result) -> Result { + self.finished = result.is_ok(); + result + } +} + +impl Drop for ErrorStatusGuard { + fn drop(&mut self) { + if !self.finished { + mark_error(&self.span); + } + } +} + /// How a process chooses its OpenTelemetry `service.name`. #[derive(Debug, Clone, Copy)] pub enum ServiceName<'a> { @@ -152,6 +209,52 @@ where mod tests { use super::*; + #[test] + fn error_status_guard_marks_only_unfinished_results() { + use tracing_subscriber::layer::SubscriberExt as _; + + let exporter = opentelemetry_sdk::trace::InMemorySpanExporterBuilder::new().build(); + let provider = SdkTracerProvider::builder() + .with_simple_exporter(exporter.clone()) + .build(); + let subscriber = tracing_subscriber::registry().with(layer(&provider, "guard-test")); + + tracing::subscriber::with_default(subscriber, || { + let failed = + tracing::info_span!("failed-operation", otel.status_code = tracing::field::Empty); + { + let _entered = failed.enter(); + drop(ErrorStatusGuard::current()); + } + drop(failed); + + let succeeded = tracing::info_span!( + "successful-operation", + otel.status_code = tracing::field::Empty + ); + { + let _entered = succeeded.enter(); + ErrorStatusGuard::current().finish(Ok::<_, ()>(())).unwrap(); + } + drop(succeeded); + }); + + let spans = exporter.get_finished_spans().unwrap(); + let failed = spans + .iter() + .find(|span| span.name == "failed-operation") + .unwrap(); + assert!(matches!( + failed.status, + opentelemetry::trace::Status::Error { .. } + )); + let succeeded = spans + .iter() + .find(|span| span.name == "successful-operation") + .unwrap(); + assert_eq!(succeeded.status, opentelemetry::trace::Status::Unset); + } + #[test] fn resource_uses_fixed_service_identity_and_custom_attributes() { let resource = resource_for(&OtlpTraceConfig { diff --git a/crates/openshell-otel/src/propagation.rs b/crates/openshell-otel/src/propagation.rs new file mode 100644 index 0000000000..8deb2ffe20 --- /dev/null +++ b/crates/openshell-otel/src/propagation.rs @@ -0,0 +1,99 @@ +// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! W3C trace-context propagation for HTTP and tonic transports. + +use http::HeaderMap; +use opentelemetry::propagation::{Extractor, Injector, TextMapPropagator}; +use opentelemetry_sdk::propagation::TraceContextPropagator; +use tracing_opentelemetry::OpenTelemetrySpanExt as _; + +/// Reads OpenTelemetry propagation fields from HTTP headers. +#[derive(Debug, Clone, Copy)] +pub struct HeaderMapExtractor<'a>(&'a HeaderMap); + +impl<'a> HeaderMapExtractor<'a> { + #[must_use] + pub fn new(headers: &'a HeaderMap) -> Self { + Self(headers) + } +} + +impl Extractor for HeaderMapExtractor<'_> { + fn get(&self, key: &str) -> Option<&str> { + self.0.get(key).and_then(|value| value.to_str().ok()) + } + + fn keys(&self) -> Vec<&str> { + self.0.keys().map(http::HeaderName::as_str).collect() + } +} + +/// Writes OpenTelemetry propagation fields to tonic metadata. +#[derive(Debug)] +pub struct MetadataMapInjector<'a>(&'a mut tonic::metadata::MetadataMap); + +impl<'a> MetadataMapInjector<'a> { + #[must_use] + pub fn new(metadata: &'a mut tonic::metadata::MetadataMap) -> Self { + Self(metadata) + } +} + +impl Injector for MetadataMapInjector<'_> { + fn set(&mut self, key: &str, value: String) { + let Ok(key) = key.parse::>() else { + return; + }; + let Ok(value) = value.parse() else { + return; + }; + self.0.insert(key, value); + } +} + +/// Injects the active W3C trace context into an outbound tonic request. +#[derive(Debug, Clone, Copy)] +pub struct TraceContextInterceptor; + +impl tonic::service::Interceptor for TraceContextInterceptor { + fn call( + &mut self, + mut request: tonic::Request<()>, + ) -> Result, tonic::Status> { + let context = tracing::Span::current().context(); + TraceContextPropagator::new().inject_context( + &context, + &mut MetadataMapInjector::new(request.metadata_mut()), + ); + Ok(request) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn header_map_extractor_reads_valid_headers() { + let mut headers = HeaderMap::new(); + headers.insert("traceparent", "00-abc-def-01".parse().unwrap()); + let extractor = HeaderMapExtractor::new(&headers); + + assert_eq!(extractor.get("traceparent"), Some("00-abc-def-01")); + assert_eq!(extractor.keys(), ["traceparent"]); + } + + #[test] + fn metadata_map_injector_writes_ascii_metadata() { + let mut metadata = tonic::metadata::MetadataMap::new(); + MetadataMapInjector::new(&mut metadata).set("traceparent", "value".to_string()); + + assert_eq!( + metadata + .get("traceparent") + .and_then(|value| value.to_str().ok()), + Some("value") + ); + } +} diff --git a/crates/openshell-server/Cargo.toml b/crates/openshell-server/Cargo.toml index 8f4dbeb859..26568fd79c 100644 --- a/crates/openshell-server/Cargo.toml +++ b/crates/openshell-server/Cargo.toml @@ -37,6 +37,7 @@ k8s-openapi = { workspace = true } # Async runtime tokio = { workspace = true } socket2 = { workspace = true } +nix = { workspace = true } # gRPC tonic = { workspace = true, features = ["channel", "tls-native-roots"] } diff --git a/crates/openshell-server/src/compute/mod.rs b/crates/openshell-server/src/compute/mod.rs index 25a2655a74..ba7eff3e92 100644 --- a/crates/openshell-server/src/compute/mod.rs +++ b/crates/openshell-server/src/compute/mod.rs @@ -13,6 +13,7 @@ pub use openshell_driver_podman::PodmanComputeConfig; pub use vm::VmComputeConfig; use crate::grpc::policy::SANDBOX_SETTINGS_OBJECT_TYPE; +use crate::otel_tracing::TraceContextInterceptor; use crate::persistence::{ DRAFT_CHUNK_OBJECT_TYPE, ObjectId, ObjectName, ObjectRecord, ObjectType, POLICY_OBJECT_TYPE, Store, WriteCondition, @@ -322,6 +323,45 @@ impl ManagedDriverProcess { socket_path, } } + + #[cfg(unix)] + async fn shutdown(&self) -> Result<(), String> { + use nix::errno::Errno; + use nix::sys::signal::{Signal, kill}; + use nix::unistd::Pid; + + let child = self + .child + .lock() + .map_err(|_| "managed compute-driver process lock poisoned".to_string())? + .take(); + let Some(mut child) = child else { + return Ok(()); + }; + + if let Some(pid) = child.id() + && let Err(err) = kill(Pid::from_raw(pid.cast_signed()), Signal::SIGTERM) + && err != Errno::ESRCH + { + return Err(format!("failed to terminate managed compute driver: {err}")); + } + + match tokio::time::timeout(Duration::from_secs(5), child.wait()).await { + Ok(Ok(_)) => Ok(()), + Ok(Err(err)) => Err(format!("failed to wait for managed compute driver: {err}")), + Err(_) => { + child + .kill() + .await + .map_err(|err| format!("failed to kill managed compute driver: {err}"))?; + child + .wait() + .await + .map(|_| ()) + .map_err(|err| format!("failed to reap managed compute driver: {err}")) + } + } + } } impl Drop for ManagedDriverProcess { @@ -333,6 +373,39 @@ impl Drop for ManagedDriverProcess { } } +#[cfg(all(test, unix))] +#[tokio::test] +async fn managed_driver_shutdown_sends_sigterm_before_forcing_exit() { + use std::process::Stdio; + use tokio::io::AsyncReadExt as _; + + let dir = tempfile::tempdir().unwrap(); + let terminated = dir.path().join("terminated"); + let mut command = tokio::process::Command::new("sh"); + command + .arg("-c") + .arg("trap 'printf terminated > \"$1\"; exit 0' TERM; printf ready; while :; do :; done") + .arg("managed-driver-test") + .arg(&terminated) + .stdout(Stdio::piped()) + .kill_on_drop(true); + let mut child = command.spawn().unwrap(); + let mut ready = [0_u8; 5]; + child + .stdout + .take() + .unwrap() + .read_exact(&mut ready) + .await + .unwrap(); + assert_eq!(&ready, b"ready"); + + let process = ManagedDriverProcess::new(child, dir.path().join("driver.sock")); + process.shutdown().await.unwrap(); + + assert_eq!(std::fs::read_to_string(terminated).unwrap(), "terminated"); +} + #[derive(Debug)] pub struct AcquiredRemoteDriverEndpoint { pub(crate) name: String, @@ -364,16 +437,22 @@ impl AcquiredRemoteDriverEndpoint { #[derive(Debug, Clone)] struct RemoteComputeDriver { - channel: Channel, + client: RemoteComputeDriverClient, } +type RemoteComputeDriverClient = ComputeDriverClient< + tonic::service::interceptor::InterceptedService, +>; + impl RemoteComputeDriver { fn new(channel: Channel) -> Self { - Self { channel } + Self { + client: ComputeDriverClient::with_interceptor(channel, TraceContextInterceptor), + } } - fn client(&self) -> ComputeDriverClient { - ComputeDriverClient::new(self.channel.clone()) + fn client(&self) -> RemoteComputeDriverClient { + self.client.clone() } } @@ -471,7 +550,7 @@ pub struct ComputeRuntime { driver_info: ComputeDriverInfoSnapshot, shutdown_cleanup: Option>, startup_resume: Option>, - _driver_process: Option>, + driver_process: Option>, default_image: String, store: Arc, sandbox_index: SandboxIndex, @@ -592,7 +671,7 @@ impl ComputeRuntime { driver_info, shutdown_cleanup, startup_resume, - _driver_process: driver_process, + driver_process, default_image, store, sandbox_index, @@ -1474,10 +1553,20 @@ impl ComputeRuntime { } pub async fn cleanup_on_shutdown(&self) -> Result<(), String> { - let Some(cleanup) = &self.shutdown_cleanup else { - return Ok(()); + let cleanup_result = match &self.shutdown_cleanup { + Some(cleanup) => cleanup.cleanup_on_shutdown().await, + None => Ok(()), + }; + #[cfg(unix)] + let process_result = match &self.driver_process { + Some(process) => process.shutdown().await, + None => Ok(()), }; - cleanup.cleanup_on_shutdown().await + + cleanup_result?; + #[cfg(unix)] + process_result?; + Ok(()) } /// Resume sandboxes whose store records say they should be running. @@ -3120,7 +3209,7 @@ pub async fn new_test_runtime_for_driver(store: Arc, driver_name: &str) - }, shutdown_cleanup: None, startup_resume: None, - _driver_process: None, + driver_process: None, default_image: "openshell/sandbox:test".to_string(), store, sandbox_index: SandboxIndex::new(), @@ -3607,7 +3696,7 @@ mod tests { }, shutdown_cleanup: None, startup_resume, - _driver_process: None, + driver_process: None, default_image: "openshell/sandbox:test".to_string(), store, sandbox_index: SandboxIndex::new(), @@ -6667,6 +6756,143 @@ mod tests { test_exporter::assert_is_root(&initialization); } + #[tokio::test] + #[cfg(unix)] + async fn remote_compute_driver_interceptor_propagates_every_rpc() { + use crate::otel_tracing::test_exporter; + use crate::test_support::FakeComputeDriver; + + let dir = tempfile::tempdir().unwrap(); + let socket_path = dir.path().join("compute-driver.sock"); + let driver = FakeComputeDriver::new(); + let _server = driver.serve_uds(&socket_path).unwrap(); + let endpoint = connect_remote_compute_driver("external-test", &socket_path) + .await + .unwrap(); + let remote = RemoteComputeDriver::new(endpoint.channel); + let sandbox = DriverSandbox { + id: "sb-trace".to_string(), + name: "trace-sandbox".to_string(), + ..Default::default() + }; + + let traced = test_exporter::install_traced(); + async { + remote + .get_capabilities(Request::new(GetCapabilitiesRequest {})) + .await + .unwrap(); + remote + .get_gateway_listener_requirements(Request::new( + GetGatewayListenerRequirementsRequest {}, + )) + .await + .unwrap(); + remote + .validate_sandbox_create(Request::new(ValidateSandboxCreateRequest { + sandbox: Some(sandbox.clone()), + })) + .await + .unwrap(); + remote + .create_sandbox(Request::new(CreateSandboxRequest { + sandbox: Some(sandbox.clone()), + })) + .await + .unwrap(); + remote + .get_sandbox(Request::new(GetSandboxRequest { + sandbox_id: sandbox.id.clone(), + sandbox_name: String::new(), + })) + .await + .unwrap(); + remote + .list_sandboxes(Request::new(ListSandboxesRequest {})) + .await + .unwrap(); + remote + .stop_sandbox(Request::new(StopSandboxRequest { + sandbox_id: sandbox.id.clone(), + sandbox_name: String::new(), + })) + .await + .unwrap(); + remote + .watch_sandboxes(Request::new(WatchSandboxesRequest {})) + .await + .unwrap(); + remote + .delete_sandbox(Request::new(DeleteSandboxRequest { + sandbox_id: sandbox.id, + sandbox_name: String::new(), + })) + .await + .unwrap(); + } + .instrument(tracing::info_span!("request")) + .await; + + let request_spans = traced.spans_named("request"); + assert_eq!(request_spans.len(), 1, "one request span should finish"); + let trace_id = request_spans[0].span_context.trace_id().to_string(); + let traceparents = driver.traceparents(); + assert_eq!( + traceparents.len(), + 9, + "the client interceptor should cover every RPC" + ); + assert!( + traceparents + .iter() + .all(|traceparent| traceparent.contains(&trace_id)), + "every RPC should carry the active trace ID; got {traceparents:?}" + ); + } + + #[tokio::test] + #[cfg(unix)] + async fn remote_compute_driver_initialization_parents_its_probes() { + use crate::otel_tracing::test_exporter; + use crate::test_support::FakeComputeDriver; + + let dir = tempfile::tempdir().unwrap(); + let socket_path = dir.path().join("compute-driver.sock"); + let driver = FakeComputeDriver::new(); + let _server = driver.serve_uds(&socket_path).unwrap(); + let endpoint = connect_remote_compute_driver("external-test", &socket_path) + .await + .unwrap(); + let store = Arc::new(Store::connect("sqlite::memory:").await.unwrap()); + + let traced = test_exporter::install_traced(); + ComputeRuntime::new_remote_driver( + endpoint, + store, + SandboxIndex::new(), + SandboxWatchBus::new(), + TracingLogBus::new(), + Arc::new(SupervisorSessionRegistry::new()), + ) + .await + .unwrap(); + + let initialization = traced.span_with("driver.initialize", "driver.name", "external-test"); + let trace_id = initialization.span_context.trace_id().to_string(); + let traceparents = driver.traceparents(); + assert_eq!( + traceparents.len(), + 2, + "the capability and listener-requirements probes should carry initialization trace context" + ); + assert!( + traceparents + .iter() + .all(|traceparent| traceparent.contains(&trace_id)), + "both initialization probes should be part of the initialization trace" + ); + } + #[tokio::test] #[cfg(unix)] async fn remote_compute_driver_forwards_lifecycle_calls_over_uds() { diff --git a/crates/openshell-server/src/compute/vm.rs b/crates/openshell-server/src/compute/vm.rs index be88047f33..80b445d201 100644 --- a/crates/openshell-server/src/compute/vm.rs +++ b/crates/openshell-server/src/compute/vm.rs @@ -32,6 +32,9 @@ use super::AcquiredRemoteDriverEndpoint; #[cfg(unix)] use super::ManagedDriverProcess; +use crate::config_file::OtlpConfig; +#[cfg(unix)] +use crate::otel_tracing::TraceContextInterceptor; #[cfg(unix)] use hyper_util::rt::TokioIo; #[cfg(unix)] @@ -452,6 +455,7 @@ pub fn compute_driver_guest_tls_paths( pub async fn spawn( config: &Config, vm_config: &VmComputeConfig, + otlp_config: Option<&OtlpConfig>, ) -> Result { if vm_config.grpc_endpoint.trim().is_empty() { return Err(Error::config( @@ -474,6 +478,7 @@ pub async fn spawn( .arg("--expected-peer-pid") .arg(std::process::id().to_string()); command.arg("--log-level").arg(&config.log_level); + append_otlp_args(&mut command, otlp_config); command .arg("--openshell-endpoint") .arg(&vm_config.grpc_endpoint); @@ -515,10 +520,18 @@ pub async fn spawn( )) } +#[cfg(unix)] +fn append_otlp_args(command: &mut Command, otlp_config: Option<&OtlpConfig>) { + if let Some(config) = otlp_config { + command.arg("--otlp-endpoint").arg(&config.endpoint); + } +} + #[cfg(not(unix))] pub async fn spawn( _config: &Config, _vm_config: &VmComputeConfig, + _otlp_config: Option<&OtlpConfig>, ) -> Result { Err(Error::config( "the vm compute driver requires unix domain socket support", @@ -526,6 +539,15 @@ pub async fn spawn( } #[cfg(unix)] +#[tracing::instrument( + name = "driver.wait_for_ready", + skip_all, + fields( + otel.name = "driver.wait_for_ready", + otel.status_code = tracing::field::Empty, + driver.name = "vm", + ) +)] async fn wait_for_compute_driver( socket_path: &Path, child: &mut tokio::process::Child, @@ -543,7 +565,8 @@ async fn wait_for_compute_driver( match connect_compute_driver(socket_path).await { Ok(channel) => { - let mut client = ComputeDriverClient::new(channel.clone()); + let mut client = + ComputeDriverClient::with_interceptor(channel.clone(), TraceContextInterceptor); match client .get_capabilities(tonic::Request::new(GetCapabilitiesRequest {})) .await @@ -586,15 +609,73 @@ async fn connect_compute_driver(socket_path: &Path) -> Result { #[cfg(all(test, unix))] mod tests { use super::{ - VmComputeConfig, compute_driver_guest_tls_paths, compute_driver_socket_path, current_euid, - prepare_compute_driver_socket_path, prepare_vm_state_dir, resolve_compute_driver_bin, - resolve_driver_search_dirs, + VmComputeConfig, append_otlp_args, compute_driver_guest_tls_paths, + compute_driver_socket_path, current_euid, prepare_compute_driver_socket_path, + prepare_vm_state_dir, resolve_compute_driver_bin, resolve_driver_search_dirs, + wait_for_compute_driver, }; + use crate::config_file::OtlpConfig; use std::os::unix::fs::PermissionsExt; use std::os::unix::net::UnixListener as StdUnixListener; use std::path::PathBuf; use tempfile::tempdir; + #[test] + fn vm_driver_command_includes_gateway_otlp_endpoint() { + let mut command = tokio::process::Command::new("openshell-driver-vm"); + append_otlp_args( + &mut command, + Some(&OtlpConfig { + endpoint: "http://collector.internal:4317".to_string(), + service_name: Some("custom-gateway".to_string()), + }), + ); + + let args = command + .as_std() + .get_args() + .map(|arg| arg.to_string_lossy().into_owned()) + .collect::>(); + assert_eq!(args, ["--otlp-endpoint", "http://collector.internal:4317"]); + } + + #[tokio::test] + async fn readiness_probe_propagates_the_active_trace() { + use crate::otel_tracing::test_exporter; + use crate::test_support::FakeComputeDriver; + + let dir = tempdir().unwrap(); + let socket_path = dir.path().join("compute-driver.sock"); + let driver = FakeComputeDriver::new(); + let _server = driver.serve_uds(&socket_path).unwrap(); + let mut child = tokio::process::Command::new("sh") + .arg("-c") + .arg("read _") + .stdin(std::process::Stdio::piped()) + .kill_on_drop(true) + .spawn() + .unwrap(); + + let traced = test_exporter::install_traced(); + wait_for_compute_driver(&socket_path, &mut child) + .await + .unwrap(); + + let readiness = traced.spans_named("driver.wait_for_ready"); + assert_eq!(readiness.len(), 1, "one readiness operation should finish"); + test_exporter::assert_is_root(&readiness[0]); + let trace_id = readiness[0].span_context.trace_id().to_string(); + assert_eq!( + driver.traceparents().len(), + 1, + "the readiness capability probe should carry trace context" + ); + assert!( + driver.traceparents()[0].contains(&trace_id), + "the readiness probe should be part of the active trace" + ); + } + #[test] fn resolve_driver_bin_uses_driver_dir_when_binary_present() { let dir = tempdir().unwrap(); diff --git a/crates/openshell-server/src/grpc/mod.rs b/crates/openshell-server/src/grpc/mod.rs index 205ffe7f00..6d5b2b35c3 100644 --- a/crates/openshell-server/src/grpc/mod.rs +++ b/crates/openshell-server/src/grpc/mod.rs @@ -45,11 +45,11 @@ use openshell_core::proto::{ RejectDraftChunkResponse, RelayFrame, RemoveWorkspaceMemberRequest, RemoveWorkspaceMemberResponse, ReportPolicyStatusRequest, ReportPolicyStatusResponse, RevokeSshSessionRequest, RevokeSshSessionResponse, RotateProviderCredentialRequest, - RotateProviderCredentialResponse, SandboxResponse, SandboxStreamEvent, ServiceEndpointResponse, - ServiceStatus, SubmitPolicyAnalysisRequest, SubmitPolicyAnalysisResponse, SupervisorMessage, - TcpForwardFrame, UndoDraftChunkRequest, UndoDraftChunkResponse, UpdateConfigRequest, - UpdateConfigResponse, UpdateProviderProfilesRequest, UpdateProviderProfilesResponse, - UpdateProviderRequest, WatchSandboxRequest, open_shell_server::OpenShell, + RotateProviderCredentialResponse, SandboxResponse, ServiceEndpointResponse, ServiceStatus, + SubmitPolicyAnalysisRequest, SubmitPolicyAnalysisResponse, SupervisorMessage, TcpForwardFrame, + UndoDraftChunkRequest, UndoDraftChunkResponse, UpdateConfigRequest, UpdateConfigResponse, + UpdateProviderProfilesRequest, UpdateProviderProfilesResponse, UpdateProviderRequest, + WatchSandboxRequest, open_shell_server::OpenShell, }; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; @@ -272,7 +272,7 @@ impl OpenShell for OpenShellService { sandbox::handle_create_sandbox(&self.state, request).await } - type WatchSandboxStream = ReceiverStream>; + type WatchSandboxStream = sandbox::WatchSandboxStream; async fn watch_sandbox( &self, diff --git a/crates/openshell-server/src/grpc/sandbox.rs b/crates/openshell-server/src/grpc/sandbox.rs index 63f8ee857d..d3cdddf41c 100644 --- a/crates/openshell-server/src/grpc/sandbox.rs +++ b/crates/openshell-server/src/grpc/sandbox.rs @@ -37,6 +37,7 @@ use std::net::IpAddr; use std::pin::Pin; use std::sync::Arc; use std::sync::atomic::{AtomicBool, Ordering}; +use std::task::{Context, Poll}; use tokio::net::{TcpListener, TcpStream}; use tokio::sync::{mpsc, oneshot}; use tokio_stream::wrappers::ReceiverStream; @@ -59,6 +60,54 @@ use crate::persistence::current_time_ms; const TCP_FORWARD_CHUNK_SIZE: usize = 64 * 1024; +#[derive(Debug)] +pub struct WatchSandboxStream { + receiver: ReceiverStream>, + producer: Option>, +} + +impl WatchSandboxStream { + fn new( + receiver: mpsc::Receiver>, + producer: tokio::task::JoinHandle<()>, + ) -> Self { + Self { + receiver: ReceiverStream::new(receiver), + producer: Some(producer), + } + } + + fn stop_producer(&mut self) -> Option> { + self.receiver.close(); + let producer = self.producer.take()?; + producer.abort(); + Some(producer) + } + + #[cfg(test)] + async fn disconnect_and_wait(mut self) { + let producer = self.stop_producer().expect("watch producer task"); + let error = producer + .await + .expect_err("watch producer should be aborted"); + assert!(error.is_cancelled(), "watch producer abort result: {error}"); + } +} + +impl futures::Stream for WatchSandboxStream { + type Item = Result; + + fn poll_next(mut self: Pin<&mut Self>, context: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.receiver).poll_next(context) + } +} + +impl Drop for WatchSandboxStream { + fn drop(&mut self) { + let _ = self.stop_producer(); + } +} + /// Fetch a sandbox by ID and authorize the caller in one step, returning /// `NOT_FOUND` for both missing and unauthorized sandboxes so that callers /// cannot distinguish the two cases (CWE-203). @@ -752,7 +801,7 @@ fn dedupe_provider_names(provider_names: &mut Vec) { pub(super) async fn handle_watch_sandbox( state: &Arc, request: Request, -) -> Result>>, Status> { +) -> Result, Status> { let principal = super::extract_principal(&request)?; let req = request.into_inner(); if req.id.is_empty() { @@ -782,7 +831,7 @@ pub(super) async fn handle_watch_sandbox( // Spawn producer task. `tokio::spawn` detaches from the current span, so // carry it across to keep the producer's store reads in the request trace. let request_span = tracing::Span::current(); - tokio::spawn(tracing::Instrument::instrument( + let producer = tokio::spawn(tracing::Instrument::instrument( async move { // Validate that the sandbox exists BEFORE subscribing to any buses. match state.store.get_message::(&sandbox_id).await { @@ -982,7 +1031,7 @@ pub(super) async fn handle_watch_sandbox( request_span, )); - Ok(Response::new(ReceiverStream::new(rx))) + Ok(Response::new(WatchSandboxStream::new(rx, producer))) } // --------------------------------------------------------------------------- @@ -2604,16 +2653,14 @@ mod tests { .expect("watch producer should send the initial snapshot") .unwrap(); - drop(stream); drop(request_span); + stream.disconnect_and_wait().await; - tokio::time::timeout(std::time::Duration::from_secs(5), async { - while traced.spans_named("disconnected_watch_request").is_empty() { - tokio::time::sleep(std::time::Duration::from_millis(10)).await; - } - }) - .await - .expect("watch producer should release the request span after client disconnect"); + assert_eq!( + traced.spans_named("disconnected_watch_request").len(), + 1, + "watch producer should release the request span after client disconnect" + ); } #[tokio::test] diff --git a/crates/openshell-server/src/lib.rs b/crates/openshell-server/src/lib.rs index 1ab9e1ada1..6151922b71 100644 --- a/crates/openshell-server/src/lib.rs +++ b/crates/openshell-server/src/lib.rs @@ -849,7 +849,10 @@ async fn build_compute_runtime( } ConfiguredComputeDriver::Builtin(ComputeDriverKind::Vm) => { let vm_config = compute::driver_config::vm_config_from_context(driver_startup)?; - let endpoint = compute::vm::spawn(config, &vm_config).await?; + let otlp_config = driver_startup + .file + .and_then(|file| file.openshell.gateway.otlp.as_ref()); + let endpoint = compute::vm::spawn(config, &vm_config, otlp_config).await?; ComputeRuntime::new_remote_driver( endpoint, store, diff --git a/crates/openshell-server/src/multiplex.rs b/crates/openshell-server/src/multiplex.rs index bf06d2c537..114201b982 100644 --- a/crates/openshell-server/src/multiplex.rs +++ b/crates/openshell-server/src/multiplex.rs @@ -22,7 +22,8 @@ use openshell_core::proto::{ inference_server::InferenceServer, open_shell_server::OpenShellServer, }; use openshell_gateway_interceptors::{EvaluationContext, GatewayInterceptorRuntime}; -use opentelemetry::propagation::{Extractor, TextMapPropagator}; +use openshell_otel::HeaderMapExtractor; +use opentelemetry::propagation::TextMapPropagator; use opentelemetry::trace::TraceContextExt as _; use opentelemetry_sdk::propagation::TraceContextPropagator; use std::collections::BTreeMap; @@ -117,7 +118,7 @@ fn make_request_span(req: &Request) -> Span { let propagator = TraceContextPropagator::new(); let parent = propagator.extract_with_context( &opentelemetry::Context::new(), - &HeaderExtractor(req.headers()), + &HeaderMapExtractor::new(req.headers()), ); if parent.span().span_context().is_valid() { let _ = span.set_parent(parent); @@ -166,18 +167,6 @@ fn record_grpc_status(headers: &http::HeaderMap, span: &Span) { } } -struct HeaderExtractor<'a>(&'a http::HeaderMap); - -impl Extractor for HeaderExtractor<'_> { - fn get(&self, key: &str) -> Option<&str> { - self.0.get(key).and_then(|value| value.to_str().ok()) - } - - fn keys(&self) -> Vec<&str> { - self.0.keys().map(http::HeaderName::as_str).collect() - } -} - /// Wrap a service with the standard request-ID middleware stack. /// /// Layer order: `SetRequestId` → `TraceLayer` → `PropagateRequestId`. diff --git a/crates/openshell-server/src/otel_tracing.rs b/crates/openshell-server/src/otel_tracing.rs index 58b4cdf804..cbe23f4231 100644 --- a/crates/openshell-server/src/otel_tracing.rs +++ b/crates/openshell-server/src/otel_tracing.rs @@ -21,8 +21,8 @@ //! Only traces are exported. Logs and metrics have their own surfaces (OCSF //! JSONL and the Prometheus `/metrics` endpoint). -pub use openshell_otel::SetupError; use openshell_otel::{OtlpTraceConfig, ServiceName}; +pub use openshell_otel::{SetupError, TraceContextInterceptor, mark_error}; #[cfg(test)] use opentelemetry_sdk::Resource; use opentelemetry_sdk::trace::SdkTracerProvider; @@ -97,14 +97,6 @@ where openshell_otel::layer(provider, INSTRUMENTATION_SCOPE) } -/// Mark `span` as failed. -/// -/// The field must be declared on the span at creation — `tracing` drops -/// records for fields a span does not have. -pub fn mark_error(span: &tracing::Span) { - span.record("otel.status_code", "ERROR"); -} - /// Isolated in-memory span exporters for tracing tests. #[cfg(test)] pub mod test_exporter { @@ -159,21 +151,34 @@ pub mod test_exporter { .collect() } + /// Returns the completed span named `name`. + pub fn span_named(&self, name: &str) -> opentelemetry_sdk::trace::SpanData { + self.find_span(name, |_| true) + } + /// The span named `name` carrying `key` = `value`. pub fn span_with( &self, name: &str, key: &str, value: &str, + ) -> opentelemetry_sdk::trace::SpanData { + self.find_span(name, |span| attribute(span, key).as_deref() == Some(value)) + } + + fn find_span( + &self, + name: &str, + predicate: impl Fn(&opentelemetry_sdk::trace::SpanData) -> bool, ) -> opentelemetry_sdk::trace::SpanData { let spans = self.finished_spans(); spans .iter() - .find(|span| span.name == name && attribute(span, key).as_deref() == Some(value)) + .find(|span| span.name == name && predicate(span)) .cloned() .unwrap_or_else(|| { panic!( - "no span {name:?} with {key}={value:?}, got {:?}", + "no matching span {name:?}, got {:?}", spans.iter().map(|s| &s.name).collect::>() ) }) diff --git a/crates/openshell-server/src/persistence/tests.rs b/crates/openshell-server/src/persistence/tests.rs index ebf15b0d21..9b6079cae4 100644 --- a/crates/openshell-server/src/persistence/tests.rs +++ b/crates/openshell-server/src/persistence/tests.rs @@ -2190,20 +2190,19 @@ async fn store_operations_export_spans_with_parents() { let store = test_store().await; let traced = test_exporter::install_traced(); + let request_span = tracing::info_span!("request"); async { store .list("sandbox", "default", 10, 0) .await .expect("list succeeds"); } - .instrument(tracing::info_span!("request")) + .instrument(request_span.clone()) .await; + drop(request_span); + let root = traced.span_named("request"); let spans = traced.finished_spans(); - let root = spans - .iter() - .find(|span| span.name == "request") - .expect("request span recorded"); let child = spans .iter() .find(|span| { diff --git a/crates/openshell-server/src/test_support.rs b/crates/openshell-server/src/test_support.rs index 2bfa9998a2..d1aa10da11 100644 --- a/crates/openshell-server/src/test_support.rs +++ b/crates/openshell-server/src/test_support.rs @@ -72,6 +72,7 @@ struct FakeComputeDriverState { gateway_listener_requirements_supported: bool, sandboxes: HashMap, calls: Vec, + traceparents: Vec, } impl Default for FakeComputeDriver { @@ -92,6 +93,7 @@ impl FakeComputeDriver { gateway_listener_requirements_supported: true, sandboxes: HashMap::new(), calls: Vec::new(), + traceparents: Vec::new(), })), } } @@ -142,6 +144,11 @@ impl FakeComputeDriver { self.with_state(|state| state.calls.clone()) } + #[must_use] + pub fn traceparents(&self) -> Vec { + self.with_state(|state| state.traceparents.clone()) + } + pub fn clear_calls(&self) { self.with_state(|state| state.calls.clear()); } @@ -170,6 +177,14 @@ impl FakeComputeDriver { .expect("fake compute driver state poisoned"); f(&mut state) } + + fn record_traceparent(&self, metadata: &tonic::metadata::MetadataMap) { + let traceparent = metadata + .get("traceparent") + .and_then(|value| value.to_str().ok()) + .map(str::to_string); + self.with_state(|state| state.traceparents.extend(traceparent)); + } } #[cfg(unix)] @@ -211,8 +226,9 @@ impl ComputeDriver for FakeComputeDriver { async fn get_capabilities( &self, - _request: Request, + request: Request, ) -> Result, Status> { + self.record_traceparent(request.metadata()); let response = self.with_state(|state| { state.calls.push(FakeComputeDriverCall::GetCapabilities); GetCapabilitiesResponse { @@ -226,8 +242,9 @@ impl ComputeDriver for FakeComputeDriver { async fn get_gateway_listener_requirements( &self, - _request: Request, + request: Request, ) -> Result, Status> { + self.record_traceparent(request.metadata()); self.with_state(|state| { state .calls @@ -246,6 +263,7 @@ impl ComputeDriver for FakeComputeDriver { &self, request: Request, ) -> Result, Status> { + self.record_traceparent(request.metadata()); let sandbox = request.into_inner().sandbox; self.with_state(|state| { state @@ -259,6 +277,7 @@ impl ComputeDriver for FakeComputeDriver { &self, request: Request, ) -> Result, Status> { + self.record_traceparent(request.metadata()); let request = request.into_inner(); let sandbox = self.with_state(|state| { state.calls.push(FakeComputeDriverCall::GetSandbox { @@ -283,8 +302,9 @@ impl ComputeDriver for FakeComputeDriver { async fn list_sandboxes( &self, - _request: Request, + request: Request, ) -> Result, Status> { + self.record_traceparent(request.metadata()); let sandboxes = self.with_state(|state| { state.calls.push(FakeComputeDriverCall::ListSandboxes); state.sandboxes.values().cloned().collect() @@ -296,6 +316,7 @@ impl ComputeDriver for FakeComputeDriver { &self, request: Request, ) -> Result, Status> { + self.record_traceparent(request.metadata()); let sandbox = request.into_inner().sandbox; self.with_state(|state| { if let Some(sandbox) = sandbox.as_ref() { @@ -312,6 +333,7 @@ impl ComputeDriver for FakeComputeDriver { &self, request: Request, ) -> Result, Status> { + self.record_traceparent(request.metadata()); let request = request.into_inner(); self.with_state(|state| { state.calls.push(FakeComputeDriverCall::StopSandbox { @@ -326,6 +348,7 @@ impl ComputeDriver for FakeComputeDriver { &self, request: Request, ) -> Result, Status> { + self.record_traceparent(request.metadata()); let request = request.into_inner(); let deleted = self.with_state(|state| { state.calls.push(FakeComputeDriverCall::DeleteSandbox { @@ -351,8 +374,9 @@ impl ComputeDriver for FakeComputeDriver { async fn watch_sandboxes( &self, - _request: Request, + request: Request, ) -> Result, Status> { + self.record_traceparent(request.metadata()); self.with_state(|state| state.calls.push(FakeComputeDriverCall::WatchSandboxes)); Ok(Response::new(Box::pin(stream::empty()))) } diff --git a/docs/reference/gateway-config.mdx b/docs/reference/gateway-config.mdx index 2fd5717aec..4db3c9c472 100644 --- a/docs/reference/gateway-config.mdx +++ b/docs/reference/gateway-config.mdx @@ -208,10 +208,12 @@ The transport is **OTLP over gRPC only**. HTTP/protobuf and HTTP/JSON are not su The OpenTelemetry SDK logs export failures after startup. Spans in a failed batch are dropped rather than retried. -`service_name` sets the `service.name` resource attribute and defaults to `openshell-gateway`. The gateway also reports `service.version`. +`service_name` sets the gateway's `service.name` resource attribute and defaults to `openshell-gateway`. The gateway also reports `service.version`. Only OpenTelemetry traces are exported. Inbound gRPC and HTTP requests produce server spans named for the RPC or HTTP method. Store and compute-driver operations appear as child spans. Internal reconciliation, credential-refresh, and driver-watch loops create operation roots for their store work because no inbound request supplies a parent. The gateway continues valid W3C `traceparent` context and starts a new trace when none is supplied. Request spans carry `method`, `path`, and the `request_id` that also appears in gateway logs. Health endpoint spans use DEBUG level and are not exported by the default INFO filter. +The gateway forwards the OTLP configuration to managed external drivers. Each driver exports under its own service name. + ### Tuning This table decides whether and where to export. How the SDK exports is controlled by the standard OpenTelemetry environment variables, which the gateway reads through the SDK rather than mirroring as TOML keys: